Changeset 333 for cpp/frams/vm


Ignore:
Timestamp:
03/01/15 01:19:56 (9 years ago)
Author:
Maciej Komosinski
Message:
  • use source/code mapping for line number and file information in vm error messages
  • enum ExtValue::CompareResult? instead of int
Location:
cpp/frams/vm
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • cpp/frams/vm/classes/collectionobj.cpp

    r286 r333  
    203203{
    204204public:
    205 bool operator()(const ExtValue *a,const ExtValue *b) {return a->compare(*b)<0;}
     205bool operator()(const ExtValue *a,const ExtValue *b) {return a->compare(*b)==ExtValue::ResultLower;}
    206206};
    207207
  • cpp/frams/vm/framscript.y

    r332 r333  
    2828void warnTruthValue(const TokenValue& t);
    2929void outFunName(const TokenValue& t);
     30static bool resultIsRelaxedEqual(ExtValue::CompareResult res);
    3031
    3132static const char* assign_op_names[]={"add","sub","mul","div","mod"};
     
    4647%left NEG     /* negation--unary minus */
    4748%left TYPEOF
    48 %left INT
    49 %left FLOAT
    50 %left STRING
     49%left INT_TYPE
     50%left FLOAT_TYPE
     51%left STRING_TYPE
    5152
    5253%token IDENT
     
    6768%token DEFAULT  "default"
    6869
    69 %token TYPEOF    "typeof"
    70 %token INT       "int"
    71 %token FLOAT     "float"
    72 %token STRING    "string"
     70%token TYPEOF      "typeof"
     71%token INT_TYPE    "int"
     72%token FLOAT_TYPE  "float"
     73%token STRING_TYPE "string"
    7374
    7475%token ASM     
     
    704705                             {trctx.out->printf("type s0,s0\n");}
    705706                     }
    706        | INT '(' expr ')' { trctx.emitLine(); $$.ident=0;
     707       | INT_TYPE '(' expr ')' { trctx.emitLine(); $$.ident=0;
    707708                       if ($3.constant)
    708709                             {$$.constant=1; $$=ExtValue($3.getInt());}
     
    710711                             {trctx.out->printf("conv 1,s0\n");}
    711712                     }
    712        | FLOAT '(' expr ')' { trctx.emitLine(); $$.ident=0;
     713       | FLOAT_TYPE '(' expr ')' { trctx.emitLine(); $$.ident=0;
    713714                       if ($3.constant)
    714715                             {$$.constant=1; $$=ExtValue($3.getDouble());}
     
    716717                             {trctx.out->printf("conv 2,s0\n");}
    717718                     }
    718        | STRING '(' expr ')' { trctx.emitLine(); $$.ident=0;
     719       | STRING_TYPE '(' expr ')' { trctx.emitLine(); $$.ident=0;
    719720                       if ($3.constant)
    720721                             {$$.constant=1; $$=ExtValue($3.getString());}
     
    748749 if ($1.constant)
    749750         {
    750          int cond=$1.compare(ExtValue::zero());
    751          if ((cond==0)||(cond==2))
     751         ExtValue::CompareResult cond=$1.compare(ExtValue::zero());
     752         if (resultIsRelaxedEqual(cond))
    752753                 {
    753754                 $1.counter=0;
     
    776777         if (!($1.constant && $1.counter==0))
    777778                 {
    778                  int cond=$4.compare(ExtValue::zero());
    779                  bool value=!((cond==0)||(cond==2));
     779                 ExtValue::CompareResult cond=$4.compare(ExtValue::zero());
     780                 bool value=!resultIsRelaxedEqual(cond);
    780781                 trstack.adjust(-1);
    781782                 trctx.out->printf("push %d\n",value);
     
    803804 if ($1.constant)
    804805         {
    805          int cond=$1.compare(ExtValue::zero());
    806          if (!((cond==0)||(cond==2)))
     806         ExtValue::CompareResult cond=$1.compare(ExtValue::zero());
     807         if (!resultIsRelaxedEqual(cond))
    807808                 {
    808809                 $1.counter=1;
     
    831832         if (!($1.constant && $1.counter==1))
    832833                 {
    833                  int cond=$4.compare(ExtValue::zero());
    834                  bool value=!((cond==0)||(cond==2));
     834                 ExtValue::CompareResult cond=$4.compare(ExtValue::zero());
     835                 bool value=!resultIsRelaxedEqual(cond);
    835836                 trstack.adjust(-1);
    836837                 trctx.out->printf("push %d\n",value);
     
    854855                         trctx.emitLine(); $$.assign=$2.assign; $$.parens=0; $$.ident=0;
    855856                         if ($2.constant)
    856                                  {$$.constant=1; int res=$2.compare(ExtValue((paInt)0)); $$.setInt((res==0)||(res==2));}
     857                                 {$$.constant=1; ExtValue::CompareResult res=$2.compare(ExtValue((paInt)0)); $$.setInt(resultIsRelaxedEqual(res));}
    857858                         else
    858859                                {trctx.out->printf("setif ~=,s0,s0\n");}
     
    14271428        {
    14281429        result.constant=1;
    1429         int cmp=arg1.compare(arg2);
     1430        ExtValue::CompareResult cmp=arg1.compare(arg2);
    14301431        ExtValue::CmpContext context;
    14311432        context.v1=&arg1;
     
    14581459}
    14591460
     1461static bool resultIsRelaxedEqual(ExtValue::CompareResult res)
     1462{
     1463return (res==ExtValue::ResultEqual)||(res==ExtValue::ResultEqualUnordered)||(res==ExtValue::ResultUnequal_RelaxedEqual);
     1464}
     1465
    14601466bool variableOk(TokenValue &tok, const TokenValue& var,int &loc)
    14611467{
Note: See TracChangeset for help on using the changeset viewer.