Browse Source

added post call initializer syntax

albertodemichelis 6 years ago
parent
commit
46f8cd6efd
1 changed files with 24 additions and 0 deletions
  1. 24 0
      squirrel/sqcompiler.cpp

+ 24 - 0
squirrel/sqcompiler.cpp

@@ -940,6 +940,30 @@ public:
          SQInteger stackbase = _fs->PopTarget();
          SQInteger closure = _fs->PopTarget();
          _fs->AddInstruction(_OP_CALL, _fs->PushTarget(), closure, stackbase, nargs);
+		 if (_token == '{')
+		 {
+			 SQInteger retval = _fs->TopTarget();
+			 SQInteger nkeys = 0;
+			 Lex();
+			 while (_token != '}') {
+				 switch (_token) {
+				 case _SC('['):
+					 Lex(); CommaExpr(); Expect(_SC(']'));
+					 Expect(_SC('=')); Expression();
+					 break;
+				 default:
+					 _fs->AddInstruction(_OP_LOAD, _fs->PushTarget(), _fs->GetConstant(Expect(TK_IDENTIFIER)));
+					 Expect(_SC('=')); Expression();
+					 break;
+				 }
+				 if (_token == ',') Lex();
+				 nkeys++;
+				 SQInteger val = _fs->PopTarget();
+				 SQInteger key = _fs->PopTarget();
+				 _fs->AddInstruction(_OP_SET, 0xFF, retval, key, val);
+			 }
+			 Lex();
+		 }
     }
     void ParseTableOrClass(SQInteger separator,SQInteger terminator)
     {