Skip to content

Commit

Permalink
Merge branch 'main' of github.com:brucehuke/Wasmnizer-ts into main
Browse files Browse the repository at this point in the history
  • Loading branch information
brucehuke committed Dec 24, 2023
2 parents 8bdcd68 + d85c564 commit 27f1682
Showing 1 changed file with 44 additions and 31 deletions.
75 changes: 44 additions & 31 deletions runtime-library/libdyntype/dynamic-simple/dyn-value/class/date.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,16 @@
* @param t time_t addr
* @return int 0: success
*/
int strtotime(const char *str, time_t *t) {
int
strtotime(const char *str, time_t *t)
{

int year, month, day, hour, minute, second;
struct tm tm_;

if (sscanf(str, "%d-%d-%d %d:%d:%d", &year, &month, &day, &hour, &minute, &second) != 6) {
if (sscanf(str, "%d-%d-%d %d:%d:%d", &year, &month, &day, &hour, &minute,
&second)
!= 6) {
return -1;
}
if (hour < 0 || hour > 23) {
Expand All @@ -39,93 +43,102 @@ int strtotime(const char *str, time_t *t) {

tm_.tm_year = year - 1900;
tm_.tm_mon = month - 1;
tm_.tm_mday = day ;
tm_.tm_mday = day;
tm_.tm_isdst = 0;
*t = mktime(&tm_);

if( *t == -1 )
if (*t == -1)
return -1;

return 0;
}

/* Constructor (new Date()) */
DynValue *date_constructor(int argc, DynValue *argv[])
DynValue *
date_constructor(int argc, DynValue *argv[])
{
DyntypeDate *dyn_obj =
(DyntypeDate *)wasm_runtime_malloc(sizeof(DyntypeDate));
if (!dyn_obj) {
return NULL;
}

if (!init_dyn_object((DyntypeObject*)dyn_obj, DynClassDate)) {
if (!init_dyn_object((DyntypeObject *)dyn_obj, DynClassDate)) {
wasm_runtime_free(dyn_obj);
return NULL;
}

if(argc==0){
if (argc == 0) {
dyn_obj->time = time(NULL);
}else if (argc == 1 && argv[0]->class_id == DynClassString){
DyntypeString* str = (DyntypeString*)argv[0];
if(strtotime(str->data, &dyn_obj->time) != 0){
}
else if (argc == 1 && argv[0]->class_id == DynClassString) {
DyntypeString *str = (DyntypeString *)argv[0];
if (strtotime(str->data, &dyn_obj->time) != 0) {
return NULL;
}
}
return (DynValue *)dyn_obj;
}

DynValue *date_get_full_year(DynValue *this_val, int argc, DynValue *argv[])
DynValue *
date_get_full_year(DynValue *this_val, int argc, DynValue *argv[])
{
DyntypeDate *dyn_obj = (DyntypeDate *)this_val;
struct tm* timeval = localtime(&(dyn_obj->time));
struct tm *timeval = localtime(&(dyn_obj->time));

return dyn_value_new_number((double)(1900 + timeval->tm_year));
}

DynValue *date_get_month(DynValue *this_val, int argc, DynValue *argv[])
DynValue *
date_get_month(DynValue *this_val, int argc, DynValue *argv[])
{
DyntypeDate *dyn_obj = (DyntypeDate *)this_val;
struct tm* timeval = localtime(&(dyn_obj->time));
struct tm *timeval = localtime(&(dyn_obj->time));
return dyn_value_new_number((double)(timeval->tm_mon));
}

DynValue *date_get_date(DynValue *this_val, int argc, DynValue *argv[])
DynValue *
date_get_date(DynValue *this_val, int argc, DynValue *argv[])
{
DyntypeDate *dyn_obj = (DyntypeDate *)this_val;
struct tm* timeval = localtime(&(dyn_obj->time));
struct tm *timeval = localtime(&(dyn_obj->time));
return dyn_value_new_number((double)(timeval->tm_mday));
}

DynValue *date_get_day(DynValue *this_val, int argc, DynValue *argv[])
DynValue *
date_get_day(DynValue *this_val, int argc, DynValue *argv[])
{
DyntypeDate *dyn_obj = (DyntypeDate *)this_val;
struct tm* timeval = localtime(&(dyn_obj->time));
struct tm *timeval = localtime(&(dyn_obj->time));
return dyn_value_new_number((double)(timeval->tm_wday));
}

DynValue *date_get_hours(DynValue *this_val, int argc, DynValue *argv[])
DynValue *
date_get_hours(DynValue *this_val, int argc, DynValue *argv[])
{
DyntypeDate *dyn_obj = (DyntypeDate *)this_val;
struct tm* timeval = localtime(&(dyn_obj->time));
struct tm *timeval = localtime(&(dyn_obj->time));
return dyn_value_new_number((double)(timeval->tm_hour));
}

DynValue *date_get_minutes(DynValue *this_val, int argc, DynValue *argv[])
DynValue *
date_get_minutes(DynValue *this_val, int argc, DynValue *argv[])
{
DyntypeDate *dyn_obj = (DyntypeDate *)this_val;
struct tm* timeval = localtime(&(dyn_obj->time));
struct tm *timeval = localtime(&(dyn_obj->time));
return dyn_value_new_number((double)(timeval->tm_min));
}

DynValue *date_get_seconds(DynValue *this_val, int argc, DynValue *argv[])
DynValue *
date_get_seconds(DynValue *this_val, int argc, DynValue *argv[])
{
DyntypeDate *dyn_obj = (DyntypeDate *)this_val;
struct tm* timeval = localtime(&(dyn_obj->time));
struct tm *timeval = localtime(&(dyn_obj->time));
return dyn_value_new_number((double)(timeval->tm_sec));
}

/* Date.prototype.xxx */
ClassMethod date_instance_methods[] = {
ClassMethod date_instance_methods[] = {
{ "getFullYear", date_get_full_year },
{ "getMonth", date_get_month },
{ "getDate", date_get_date },
Expand All @@ -135,18 +148,18 @@ ClassMethod date_instance_methods[] = {
{ "getSeconds", date_get_seconds },
};

DynValue *date_now(DynValue *this_val, int argc, DynValue *argv[])
DynValue *
date_now(DynValue *this_val, int argc, DynValue *argv[])
{
// get unix timestamp
struct timeval start;
gettimeofday( &start, NULL );
return dyn_value_new_number((double)(start.tv_sec*1000 + start.tv_usec/1000));
gettimeofday(&start, NULL);
return dyn_value_new_number(
(double)(start.tv_sec * 1000 + start.tv_usec / 1000));
}

/* Date.xxx */
ClassMethod date_class_methods[] = {
{ "now", date_now }
};
ClassMethod date_class_methods[] = { { "now", date_now } };

ClassMeta date_class_meta = {
.constructor = date_constructor,
Expand Down

0 comments on commit 27f1682

Please sign in to comment.