add isnan

This commit is contained in:
Li Haokun 2021-08-27 17:43:01 +08:00 committed by GitHub
parent 385f0af17e
commit 59dc0d1423
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 16 additions and 4 deletions

View File

@ -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;

View File

@ -15,7 +15,6 @@
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <thread>
#include <list>
#include <stack>
#include <queue>

View File

@ -40,6 +40,7 @@ nasal_ref builtin_exp(std::vector<nasal_ref>&,nasal_gc&);
nasal_ref builtin_ln(std::vector<nasal_ref>&,nasal_gc&);
nasal_ref builtin_sqrt(std::vector<nasal_ref>&,nasal_gc&);
nasal_ref builtin_atan2(std::vector<nasal_ref>&,nasal_gc&);
nasal_ref builtin_isnan(std::vector<nasal_ref>&,nasal_gc&);
nasal_ref builtin_time(std::vector<nasal_ref>&,nasal_gc&);
nasal_ref builtin_contains(std::vector<nasal_ref>&,nasal_gc&);
nasal_ref builtin_delete(std::vector<nasal_ref>&,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<nasal_ref>& 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<nasal_ref>& 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<nasal_ref>& local_scope,nasal_gc& gc)
{
nasal_ref val_addr=local_scope[1];

View File

@ -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;

View File

@ -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~='\'';