diff --git a/lib.nas b/lib.nas index 45f6bf5..a271acd 100644 --- a/lib.nas +++ b/lib.nas @@ -138,7 +138,9 @@ var math= exp: func(x) {return __builtin_exp(x); }, ln: func(x) {return __builtin_ln(x); }, sqrt: func(x) {return __builtin_sqrt(x); }, - atan2: func(x,y){return __builtin_atan2(x,y);} + atan2: func(x,y){return __builtin_atan2(x,y);}, + nan: func() {return 1/0-1/0; }, + isnan: func(x) {return __builtin_isnan(x); } }; var D2R=math.pi/180; \ No newline at end of file diff --git a/nasal.h b/nasal.h index ad41a6c..1446dfd 100644 --- a/nasal.h +++ b/nasal.h @@ -15,7 +15,6 @@ #include #include #include -#include #include #include #include diff --git a/nasal_builtin.h b/nasal_builtin.h index 9230eed..4b443b1 100644 --- a/nasal_builtin.h +++ b/nasal_builtin.h @@ -40,6 +40,7 @@ nasal_ref builtin_exp(std::vector&,nasal_gc&); nasal_ref builtin_ln(std::vector&,nasal_gc&); nasal_ref builtin_sqrt(std::vector&,nasal_gc&); nasal_ref builtin_atan2(std::vector&,nasal_gc&); +nasal_ref builtin_isnan(std::vector&,nasal_gc&); nasal_ref builtin_time(std::vector&,nasal_gc&); nasal_ref builtin_contains(std::vector&,nasal_gc&); nasal_ref builtin_delete(std::vector&,nasal_gc&); @@ -92,6 +93,7 @@ struct FUNC_TABLE {"__builtin_ln", builtin_ln }, {"__builtin_sqrt", builtin_sqrt }, {"__builtin_atan2", builtin_atan2 }, + {"__builtin_isnan", builtin_isnan }, {"__builtin_time", builtin_time }, {"__builtin_contains",builtin_contains}, {"__builtin_delete", builtin_delete }, @@ -596,6 +598,13 @@ nasal_ref builtin_atan2(std::vector& local_scope,nasal_gc& gc) ret_addr->ptr.num=atan2(y_val_addr->ptr.num,x_val_addr->ptr.num); return ret_addr; } +nasal_ref builtin_isnan(std::vector& local_scope,nasal_gc& gc) +{ + nasal_ref x=local_scope[1]; + if(x->type==vm_num && std::isnan(x->ptr.num)) + return gc.one_addr; + return gc.zero_addr; +} nasal_ref builtin_time(std::vector& local_scope,nasal_gc& gc) { nasal_ref val_addr=local_scope[1]; diff --git a/stl/lib.nas b/stl/lib.nas index 45f6bf5..a271acd 100644 --- a/stl/lib.nas +++ b/stl/lib.nas @@ -138,7 +138,9 @@ var math= exp: func(x) {return __builtin_exp(x); }, ln: func(x) {return __builtin_ln(x); }, sqrt: func(x) {return __builtin_sqrt(x); }, - atan2: func(x,y){return __builtin_atan2(x,y);} + atan2: func(x,y){return __builtin_atan2(x,y);}, + nan: func() {return 1/0-1/0; }, + isnan: func(x) {return __builtin_isnan(x); } }; var D2R=math.pi/180; \ No newline at end of file diff --git a/test/lexer.nas b/test/lexer.nas index b66a9fa..737bd12 100644 --- a/test/lexer.nas +++ b/test/lexer.nas @@ -48,7 +48,7 @@ var lexer=func(file) elsif(c=='r' ) str~='\r'; elsif(c=='t' ) str~='\t'; elsif(c=='v' ) str~='\v'; - elsif(c=='?' ) str~='?'; + elsif(c=='?' ) str~='\?'; elsif(c=='0' ) str~='\0'; elsif(c=='\\') str~='\\'; elsif(c=='\'') str~='\'';