From 4f60994c77af01bf9a5f18d22aa405f10545be19 Mon Sep 17 00:00:00 2001 From: iizuka Date: Tue, 28 Apr 2026 20:52:16 +0800 Subject: [PATCH 1/2] memory management of variables --- src_blockchain/bc/DebugDefaultLogger.cpp | 2 +- src_blockchain/bc/DebugDefaultLogger.h | 2 +- src_db/base/StackRelease.h | 1 + src_gen/alinous_lang/AlinousLang.cc | 1049 ++++----- src_gen/alinous_lang/AlinousLang.h | 1936 ++++++++--------- .../engine/compiler/ParseErrorHandler.cpp | 26 +- .../engine/compiler/ParseErrorHandler.h | 2 + src_smartcontract/engine/jj/alinous.jj | 932 ++++---- src_smartcontract/engine/jj/base.jj | 78 +- src_smartcontract/engine/jj/expression.jj | 257 ++- src_smartcontract/engine/jj/json.jj | 16 +- src_smartcontract/engine/jj/sql_ddl.jj | 74 +- src_smartcontract/engine/jj/sql_dml.jj | 85 +- src_smartcontract/engine/jj/sql_expression.jj | 183 +- src_smartcontract/engine/jj/sql_join.jj | 49 +- src_smartcontract/engine/jj/statement.jj | 77 +- src_smartcontract/engine/jj/statement_ctrl.jj | 61 +- src_smartcontract/engine/jj/types.jj | 52 +- src_smartcontract/engine/sc/alinouslang.h | 5 +- src_test/CMakeLists.txt | 1 + .../finalizer/test_register_vote_ticket.cpp | 2 +- .../finalizer/test_vote_and_finalize.cpp | 2 +- .../blockchain/finalizer/test_vote_revoke.cpp | 2 +- .../finalizer/test_vote_revoke_validation.cpp | 4 +- .../blockchain/pow_pool/test_pow_pool.cpp | 2 +- .../blockchain/testnet/test_first_net.cpp | 4 +- .../test_pending_request_processor.cpp | 8 +- .../testnet/test_sync_header_only.cpp | 2 +- .../blockchain/wallet/test_net_wallet.cpp | 4 +- .../p2p/p2pserver/test_p2p_client_command.cpp | 2 +- src_test/smartcontract_err/CMakeLists.txt | 7 + .../resources/class01/main.alns | 23 + .../resources/class01/main_err.alns | 23 + .../smartcontract_err/test_exception_std.cpp | 41 + .../test_statement_error.cpp | 37 + 35 files changed, 2658 insertions(+), 2393 deletions(-) create mode 100644 src_test/smartcontract_err/CMakeLists.txt create mode 100644 src_test/smartcontract_err/resources/class01/main.alns create mode 100644 src_test/smartcontract_err/resources/class01/main_err.alns create mode 100644 src_test/smartcontract_err/test_exception_std.cpp create mode 100644 src_test/smartcontract_err/test_statement_error.cpp diff --git a/src_blockchain/bc/DebugDefaultLogger.cpp b/src_blockchain/bc/DebugDefaultLogger.cpp index 27d6631..37d0641 100644 --- a/src_blockchain/bc/DebugDefaultLogger.cpp +++ b/src_blockchain/bc/DebugDefaultLogger.cpp @@ -51,7 +51,7 @@ void DebugDefaultLogger::log(const UnicodeString *message) noexcept { delete [] str; } -void DebugDefaultLogger::setSection(int section) noexcept { +void DebugDefaultLogger::addSection(int section) noexcept { this->sections.addElement(section); } diff --git a/src_blockchain/bc/DebugDefaultLogger.h b/src_blockchain/bc/DebugDefaultLogger.h index 182a36a..6469bad 100644 --- a/src_blockchain/bc/DebugDefaultLogger.h +++ b/src_blockchain/bc/DebugDefaultLogger.h @@ -24,7 +24,7 @@ class DebugDefaultLogger: public ISystemLogger { DebugDefaultLogger(); virtual ~DebugDefaultLogger(); - void setSection(int section) noexcept; + void addSection(int section) noexcept; virtual void logException(const Exception* e) noexcept; virtual void log(const UnicodeString* message) noexcept; diff --git a/src_db/base/StackRelease.h b/src_db/base/StackRelease.h index b11181f..3a5eac0 100644 --- a/src_db/base/StackRelease.h +++ b/src_db/base/StackRelease.h @@ -16,6 +16,7 @@ namespace alinous { template class StackRelease { public: + StackRelease() : ptr(nullptr) {} explicit StackRelease(T* ptr) : ptr(ptr){ } ~StackRelease(){ diff --git a/src_gen/alinous_lang/AlinousLang.cc b/src_gen/alinous_lang/AlinousLang.cc index 612bd5a..ecd6739 100644 --- a/src_gen/alinous_lang/AlinousLang.cc +++ b/src_gen/alinous_lang/AlinousLang.cc @@ -23,7 +23,7 @@ namespace alinouslang { CompilationUnit - * AlinousLang::compilationUnit() {CompilationUnit* unit = new CompilationUnit(); + * AlinousLang::compilationUnit() {CompilationUnit* unit = new CompilationUnit(); __STP(unit); PackageDeclare* pkg = nullptr; ImportsDeclare* imports = nullptr; ClassDeclare* clazz = nullptr; @@ -74,12 +74,12 @@ unit->setPosition(clazz); if (!hasError) { jj_consume_token(0); } -return unit; +return __STP_MV(unit); assert(false); } -ImportsDeclare * AlinousLang::importsDeclare() {ImportsDeclare* importsDeclare = new ImportsDeclare(); +ImportsDeclare * AlinousLang::importsDeclare() {ImportsDeclare* importsDeclare = new ImportsDeclare(); __STP(importsDeclare); ImportDeclare* dec = nullptr; if (!hasError) { while (!hasError) { @@ -106,12 +106,12 @@ importsDeclare->addImport(dec); } __ONERROR(importsDeclare); - return importsDeclare; + return __STP_MV(importsDeclare); assert(false); } -ImportDeclare * AlinousLang::importDeclare() {ImportDeclare* dec = new ImportDeclare(); +ImportDeclare * AlinousLang::importDeclare() {ImportDeclare* dec = new ImportDeclare(); __STP(dec); Token* t = nullptr; if (!hasError) { t = jj_consume_token(IMPORT); @@ -160,20 +160,20 @@ dec->setPosition(t); if (!hasError) { dec->setPosition(t); } -__ONERROR(dec); - return dec; +return __STP_MV(dec); assert(false); } PackageDeclare * AlinousLang::packageDeclare() {PackageDeclare* pkg = nullptr; + StackRelease __pkg; PackageNameDeclare* name = nullptr; Token* t = nullptr; if (!hasError) { t = jj_consume_token(PACKAGE); } if (!hasError) { -pkg=new PackageDeclare(); +pkg=new PackageDeclare(); __pkg.reset(pkg); pkg->setPosition(t); } if (!hasError) { @@ -189,19 +189,19 @@ pkg->setName(name); if (!hasError) { pkg->setPosition(t); } -__ONERROR(pkg); - return pkg; +return __pkg.move(); assert(false); } PackageNameDeclare * AlinousLang::packageNameDeclare() {PackageNameDeclare* names = nullptr; + StackRelease __names; Token* t = nullptr; if (!hasError) { t = jj_consume_token(IDENTIFIER); } if (!hasError) { -names = new PackageNameDeclare(); +names = new PackageNameDeclare(); __names.reset(names); names->addSegment(_STR(t)); names->setPosition(t); } @@ -228,13 +228,14 @@ names->addSegment(_STR(t)); if (!hasError) { } -__ONERROR(names); - return names; +return __names.move(); assert(false); } ClassDeclare * AlinousLang::classDeclare() {ClassDeclare* clazz = nullptr; + StackRelease __clazz; + GenericsClassDeclare* gclazz = nullptr; GenericsParameter* param = nullptr; Token* cls = nullptr; @@ -251,7 +252,7 @@ ClassDeclare * AlinousLang::classDeclare() {ClassDeclare* clazz = nul cls = jj_consume_token(CLASS); } if (!hasError) { -clazz = new ClassDeclare(); +clazz = new ClassDeclare(); __clazz.reset(clazz); } break; } @@ -425,13 +426,12 @@ clazz->setImplements(clsimplements); clazz->setPositions(cls, block); clazz->setBlock(block); } -__ONERROR(clazz); - return clazz; +return __clazz.move(); assert(false); } -ClassExtends * AlinousLang::classExtends() {ClassExtends* extends = new ClassExtends(); +ClassExtends * AlinousLang::classExtends() {ClassExtends* extends = new ClassExtends(); __STP(extends); ClassName* name = nullptr; Token* t = nullptr; if (!hasError) { @@ -447,13 +447,12 @@ extends->setPosition(t); extends->setPosition(name); extends->setClassName(name); } -__ONERROR(extends); - return extends; +return __STP_MV(extends); assert(false); } -ClassImplements * AlinousLang::classImplements() {ClassImplements* implements = new ClassImplements(); +ClassImplements * AlinousLang::classImplements() {ClassImplements* implements = new ClassImplements(); __STP(implements); ClassName* name = nullptr; Token* t = nullptr; if (!hasError) { @@ -499,13 +498,12 @@ implements->setPosition(name); if (!hasError) { } -__ONERROR(implements); - return implements; +return __STP_MV(implements); assert(false); } -ClassName * AlinousLang::className() {ClassName* name = new ClassName(); +ClassName * AlinousLang::className() {ClassName* name = new ClassName(); __STP(name); Token* t = nullptr; if (!hasError) { t = jj_consume_token(IDENTIFIER); @@ -545,13 +543,13 @@ name->setPosition(t); if (!hasError) { } -__ONERROR(name); - return name; +return __STP_MV(name); assert(false); } ClassDeclareBlock * AlinousLang::classDeclareBlock() {ClassDeclareBlock* block = nullptr; + StackRelease __block; Token* begin, *end; MethodDeclare* method = nullptr; @@ -565,7 +563,7 @@ ClassDeclareBlock * AlinousLang::classDeclareBlock() {ClassDecla begin = jj_consume_token(L_BRACE); } if (!hasError) { -block = new ClassDeclareBlock(); +block = new ClassDeclareBlock(); __block.reset(block); block->setPosition(begin); } if (!hasError) { @@ -721,13 +719,12 @@ _static = false; if (!hasError) { block->setPosition(end); } -__ONERROR(block); - return block; +return __block.move(); assert(false); } -MethodDeclare * AlinousLang::methodDeclare(AccessControlDeclare* ctrl, bool _static, AbstractType* type, Token* identifier) {MethodDeclare* method = new MethodDeclare(); +MethodDeclare * AlinousLang::methodDeclare(AccessControlDeclare* ctrl, bool _static, AbstractType* type, Token* identifier) {MethodDeclare* method = new MethodDeclare(); __STP(method); method->setPosition(ctrl); @@ -776,13 +773,12 @@ method->setPosition(t); if (!hasError) { } -__ONERROR(method); - return method; +return __STP_MV(method); assert(false); } -MemberVariableDeclare * AlinousLang::memberVariableDeclare(AccessControlDeclare* ctrl, bool _static, AbstractType* type, Token* identifier) {MemberVariableDeclare* variable = new MemberVariableDeclare(); +MemberVariableDeclare * AlinousLang::memberVariableDeclare(AccessControlDeclare* ctrl, bool _static, AbstractType* type, Token* identifier) {MemberVariableDeclare* variable = new MemberVariableDeclare(); __STP(variable); Token* t = nullptr; variable->setPosition(ctrl); @@ -822,14 +818,13 @@ variable->setPosition(exp); if (!hasError) { variable->setPosition(t); } -__ONERROR(variable); - return variable; +return __STP_MV(variable); assert(false); } AccessControlDeclare * AlinousLang::accessControlDeclare() {Token* t = nullptr; - AccessControlDeclare* ctrl = new AccessControlDeclare(); + AccessControlDeclare* ctrl = new AccessControlDeclare(); __STP(ctrl); if (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case PUBLIC:{ @@ -868,13 +863,12 @@ ctrl->setCtrl(AccessControlDeclare::PRIVATE); errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } } -__ONERROR(ctrl); - return ctrl; +return __STP_MV(ctrl); assert(false); } -ArgumentsListDeclare * AlinousLang::argumentsListDeclare() {ArgumentsListDeclare* arguments = new ArgumentsListDeclare(); +ArgumentsListDeclare * AlinousLang::argumentsListDeclare() {ArgumentsListDeclare* arguments = new ArgumentsListDeclare(); __STP(arguments); Token* t = nullptr; ArgumentDeclare* arg = nullptr; if (!hasError) { @@ -939,13 +933,12 @@ arguments->addArgument(arg); if (!hasError) { arguments->setPosition(t); } -__ONERROR(arguments); - return arguments; +return __STP_MV(arguments); assert(false); } -ArgumentDeclare * AlinousLang::argumentDeclare() {ArgumentDeclare* arg = new ArgumentDeclare(); +ArgumentDeclare * AlinousLang::argumentDeclare() {ArgumentDeclare* arg = new ArgumentDeclare(); __STP(arg); AbstractType* type = nullptr; Token* t = nullptr; if (!hasError) { @@ -962,8 +955,7 @@ arg->setType(type); arg->setName(_STR(t)); arg->setPosition(t); } -__ONERROR(arg); - return arg; +return __STP_MV(arg); assert(false); } @@ -1000,8 +992,7 @@ dec->addDimension(); if (!hasError) { } -__ONERROR(dec); - return dec; +return dec; assert(false); } @@ -1075,13 +1066,12 @@ AbstractType * AlinousLang::typeBody() {AbstractType* dec = nullptr; errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } } -__ONERROR(dec); - return dec; +return dec; assert(false); } -ObjectType * AlinousLang::objectType() {ObjectType* dec = new ObjectType(); +ObjectType * AlinousLang::objectType() {ObjectType* dec = new ObjectType(); __STP(dec); PackageNameDeclare* packageName = nullptr; Token* t=nullptr; GenericsObjectType* geneticsObject = nullptr; @@ -1174,13 +1164,12 @@ geneticsObject->setPosition(t); ; } } -__ONERROR(dec); - return dec; +return __STP_MV(dec); assert(false); } -BoolType * AlinousLang::boolType() {BoolType* dec = new BoolType(); +BoolType * AlinousLang::boolType() {BoolType* dec = new BoolType(); __STP(dec); Token* t=nullptr; if (!hasError) { t = jj_consume_token(BOOLEAN); @@ -1188,13 +1177,12 @@ BoolType * AlinousLang::boolType() {BoolType* dec = new BoolType(); if (!hasError) { dec->setPositions(_P(t, t)); } -__ONERROR(dec); - return dec; +return __STP_MV(dec); assert(false); } -ByteType * AlinousLang::byteType() {ByteType* dec = new ByteType(); +ByteType * AlinousLang::byteType() {ByteType* dec = new ByteType(); __STP(dec); Token* t=nullptr; if (!hasError) { t = jj_consume_token(BYTE); @@ -1202,13 +1190,12 @@ ByteType * AlinousLang::byteType() {ByteType* dec = new ByteType(); if (!hasError) { dec->setPositions(_P(t, t)); } -__ONERROR(dec); - return dec; +return __STP_MV(dec); assert(false); } -CharType * AlinousLang::charType() {CharType* dec = new CharType(); +CharType * AlinousLang::charType() {CharType* dec = new CharType(); __STP(dec); Token* t=nullptr; if (!hasError) { t = jj_consume_token(CHAR); @@ -1216,13 +1203,12 @@ CharType * AlinousLang::charType() {CharType* dec = new CharType(); if (!hasError) { dec->setPositions(_P(t, t)); } -__ONERROR(dec); - return dec; +return __STP_MV(dec); assert(false); } -ShortType * AlinousLang::shortType() {ShortType* dec = new ShortType(); +ShortType * AlinousLang::shortType() {ShortType* dec = new ShortType(); __STP(dec); Token* t=nullptr; if (!hasError) { t = jj_consume_token(SHORT); @@ -1230,13 +1216,12 @@ ShortType * AlinousLang::shortType() {ShortType* dec = new ShortType(); if (!hasError) { dec->setPositions(_P(t, t)); } -__ONERROR(dec); - return dec; +return __STP_MV(dec); assert(false); } -IntType * AlinousLang::intType() {IntType* dec = new IntType(); +IntType * AlinousLang::intType() {IntType* dec = new IntType(); __STP(dec); Token* t=nullptr; if (!hasError) { t = jj_consume_token(INT); @@ -1244,13 +1229,12 @@ IntType * AlinousLang::intType() {IntType* dec = new IntType(); if (!hasError) { dec->setPositions(_P(t, t)); } -__ONERROR(dec); - return dec; +return __STP_MV(dec); assert(false); } -LongType * AlinousLang::longType() {LongType* dec = new LongType(); +LongType * AlinousLang::longType() {LongType* dec = new LongType(); __STP(dec); Token* t=nullptr; if (!hasError) { t = jj_consume_token(LONG); @@ -1258,13 +1242,12 @@ LongType * AlinousLang::longType() {LongType* dec = new LongType(); if (!hasError) { dec->setPositions(_P(t, t)); } -__ONERROR(dec); - return dec; +return __STP_MV(dec); assert(false); } -StringType * AlinousLang::stringType() {StringType* dec = new StringType(); +StringType * AlinousLang::stringType() {StringType* dec = new StringType(); __STP(dec); Token* t=nullptr; if (!hasError) { t = jj_consume_token(STRING); @@ -1272,13 +1255,12 @@ StringType * AlinousLang::stringType() {StringType* dec = new StringTyp if (!hasError) { dec->setPositions(_P(t, t)); } -__ONERROR(dec); - return dec; +return __STP_MV(dec); assert(false); } -VoidType * AlinousLang::voidType() {VoidType* dec = new VoidType(); +VoidType * AlinousLang::voidType() {VoidType* dec = new VoidType(); __STP(dec); Token* t=nullptr; if (!hasError) { t = jj_consume_token(VOID); @@ -1286,13 +1268,12 @@ VoidType * AlinousLang::voidType() {VoidType* dec = new VoidType(); if (!hasError) { dec->setPositions(_P(t, t)); } -__ONERROR(dec); - return dec; +return __STP_MV(dec); assert(false); } -DomType * AlinousLang::domType() {DomType* dec = new DomType(); +DomType * AlinousLang::domType() {DomType* dec = new DomType(); __STP(dec); Token* t=nullptr; if (!hasError) { t = jj_consume_token(VAR); @@ -1300,8 +1281,7 @@ DomType * AlinousLang::domType() {DomType* dec = new DomType(); if (!hasError) { dec->setPositions(_P(t, t)); } -__ONERROR(dec); - return dec; +return __STP_MV(dec); assert(false); } @@ -1309,83 +1289,98 @@ assert(false); AbstractStatement * AlinousLang::statement() {AbstractStatement* stmt = nullptr; if (!hasError) { - if (jj_2_6(3)) { + try { if (!hasError) { - stmt = statementBlock(); - } - } else if (jj_2_7(4)) { - if (!hasError) { - stmt = substitutionStatement(); - } - } else { - switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { - case BOOLEAN: - case BYTE: - case CHAR: - case SHORT: - case INT: - case LONG: - case STRING: - case VAR: - case VOID: - case IDENTIFIER:{ - if (!hasError) { - stmt = variableDeclareStatement(); - } - break; - } - case BREAK: - case CONTINUE: - case DO: - case FOR: - case IF: - case RETURN: - case THROW: - case TRY: - case WHILE:{ - if (!hasError) { - //stmt=expressionStatement() | - stmt = ctrlStatement(); - } - break; - } - case SEMI_COLON:{ - if (!hasError) { - stmt = blankStatement(); - } - break; - } - case CREATE: - case DROP: - case ALTER:{ + if (jj_2_6(3)) { if (!hasError) { - stmt = ddlStatement(); + stmt = statementBlock(); } - break; - } - case SELECT: - case INSERT: - case UPDATE: - case DELETE: - case BEGIN: - case COMMIT: - case ROLLBACK:{ + } else if (jj_2_7(4)) { if (!hasError) { - stmt = sqlDmlStatement(); + stmt = substitutionStatement(); } - break; + } else { + switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { + case BOOLEAN: + case BYTE: + case CHAR: + case SHORT: + case INT: + case LONG: + case STRING: + case VAR: + case VOID: + case IDENTIFIER:{ + if (!hasError) { + stmt = variableDeclareStatement(); + } + break; + } + case BREAK: + case CONTINUE: + case DO: + case FOR: + case IF: + case RETURN: + case THROW: + case TRY: + case WHILE:{ + if (!hasError) { + //stmt=expressionStatement() | + stmt = ctrlStatement(); + } + break; + } + case SEMI_COLON:{ + if (!hasError) { + stmt = blankStatement(); + } + break; + } + case CREATE: + case DROP: + case ALTER:{ + if (!hasError) { + stmt = ddlStatement(); + } + break; + } + case SELECT: + case INSERT: + case UPDATE: + case DELETE: + case BEGIN: + case COMMIT: + case ROLLBACK:{ + if (!hasError) { + stmt = sqlDmlStatement(); + } + break; + } + default: + jj_la1[25] = jj_gen; + jj_consume_token(-1); + errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } - default: - jj_la1[25] = jj_gen; - jj_consume_token(-1); - errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } - } - } - if (!hasError) { + } + if (!hasError) { - } + } + if (!hasError) { return stmt; + } + } catch ( ...) { +std::exception_ptr p = std::current_exception(); + try{ + std::rethrow_exception(p); + }catch(ParseException* e){ + if(e != nullptr){ + delete e; + } + } + } + } assert(false); } @@ -1401,13 +1396,12 @@ VariableDeclareStatement * AlinousLang::variableDeclareSt if (!hasError) { stmt->setPosition(t); } -__ONERROR(stmt); - return stmt; +return stmt; assert(false); } -VariableDeclareStatement * AlinousLang::__variableDeclareStatement() {VariableDeclareStatement* stmt = new VariableDeclareStatement(); +VariableDeclareStatement * AlinousLang::__variableDeclareStatement() {VariableDeclareStatement* stmt = new VariableDeclareStatement(); __STP(stmt); AbstractType* type = nullptr; VariableIdentifier* valId = nullptr; AbstractExpression* exp = nullptr; @@ -1449,8 +1443,7 @@ stmt->setInitExpression(exp); ; } } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } @@ -1473,14 +1466,20 @@ assert(false); AbstractStatement * AlinousLang::__substitutionStatement() {AbstractStatement* stmt = nullptr; + StackRelease __stmt; AbstractExpression* first = nullptr; + StackRelease __first; + AbstractExpression* exp = nullptr; Token* t = nullptr; if (!hasError) { first = expression(); } if (!hasError) { +__first.reset(first); + } + if (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case EQUALS:{ if (!hasError) { @@ -1491,8 +1490,8 @@ AbstractStatement * AlinousLang::__substitutionStatement() {Abst } if (!hasError) { SubstitutionStatement* sstmt = new SubstitutionStatement(); - stmt = sstmt; - sstmt->setVariableId(first); + stmt = sstmt; __stmt.reset(stmt); + sstmt->setVariableId(__first.move()); sstmt->setPosition(first); sstmt->setExpression(exp); @@ -1508,18 +1507,17 @@ SubstitutionStatement* sstmt = new SubstitutionStatement(); if (!hasError) { if(stmt == nullptr){ ExpressionStatement* exstmt = new ExpressionStatement(); - stmt = exstmt; - exstmt->setExpression(first); + stmt = exstmt; __stmt.reset(stmt); + exstmt->setExpression(__first.move()); exstmt->setPosition(first); } } -__ONERROR(stmt); - return stmt; +return __stmt.move(); assert(false); } -BlankStatement * AlinousLang::blankStatement() {BlankStatement* stmt = new BlankStatement(); +BlankStatement * AlinousLang::blankStatement() {BlankStatement* stmt = new BlankStatement(); __STP(stmt); Token* t = nullptr; if (!hasError) { t = jj_consume_token(SEMI_COLON); @@ -1528,13 +1526,12 @@ BlankStatement * AlinousLang::blankStatement() {BlankStatement* stm stmt->setPosition(t); stmt->setPosition(t); } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } -StatementBlock * AlinousLang::statementBlock() {StatementBlock* block = new StatementBlock(); +StatementBlock * AlinousLang::statementBlock() {StatementBlock* block = new StatementBlock(); __STP(block); AbstractStatement* stmt = nullptr; Token* t = nullptr; if (!hasError) { @@ -1654,8 +1651,7 @@ block->addStatement(stmt); if (!hasError) { block->setPosition(t); } -__ONERROR(block); - return block; +return __STP_MV(block); assert(false); } @@ -1732,7 +1728,7 @@ assert(false); } -TryStatement * AlinousLang::tryStatement() {TryStatement* stmt = new TryStatement(); +TryStatement * AlinousLang::tryStatement() {TryStatement* stmt = new TryStatement(); __STP(stmt); StatementBlock* block = nullptr; Token* t = nullptr; @@ -1789,13 +1785,12 @@ stmt->setFinallyStatement(finallyStmt); ; } } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } -FinallyStatement * AlinousLang::finallyStatement() {FinallyStatement* stmt = new FinallyStatement(); +FinallyStatement * AlinousLang::finallyStatement() {FinallyStatement* stmt = new FinallyStatement(); __STP(stmt); StatementBlock* block = nullptr; Token* t = nullptr; if (!hasError) { @@ -1811,13 +1806,12 @@ stmt->setPosition(t); stmt->setBlock(block); stmt->setPosition(block); } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } -CatchStatement * AlinousLang::catchStatement() {CatchStatement* stmt = new CatchStatement(); +CatchStatement * AlinousLang::catchStatement() {CatchStatement* stmt = new CatchStatement(); __STP(stmt); StatementBlock* block = nullptr; Token* t = nullptr; @@ -1854,13 +1848,12 @@ stmt->setPosition(t); stmt->setBlock(block); stmt->setPosition(block); } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } -ThrowStatement * AlinousLang::throwStatement() {ThrowStatement* stmt = new ThrowStatement(); +ThrowStatement * AlinousLang::throwStatement() {ThrowStatement* stmt = new ThrowStatement(); __STP(stmt); AbstractExpression* exp = nullptr; Token* t = nullptr; if (!hasError) { @@ -1882,13 +1875,12 @@ stmt->setExpression(exp); if (!hasError) { stmt->setPosition(t); } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } -ForStatement * AlinousLang::forStatement() {ForStatement* stmt = new ForStatement(); +ForStatement * AlinousLang::forStatement() {ForStatement* stmt = new ForStatement(); __STP(stmt); AbstractExpression* exp = nullptr; AbstractStatement* st = nullptr; Token* t = nullptr; @@ -1950,8 +1942,7 @@ stmt->setPosition(t); stmt->setStatement(st); stmt->setPosition(st); } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } @@ -1986,13 +1977,12 @@ AbstractStatement * AlinousLang::forInnerStatement() {AbstractSt } } } -__ONERROR(stmt); - return stmt; +return stmt; assert(false); } -DoWhileStatement * AlinousLang::doWhileStatement() {DoWhileStatement* stmt = new DoWhileStatement(); +DoWhileStatement * AlinousLang::doWhileStatement() {DoWhileStatement* stmt = new DoWhileStatement(); __STP(stmt); AbstractExpression* exp = nullptr; AbstractStatement* st = nullptr; Token* t = nullptr; @@ -2034,13 +2024,12 @@ stmt->setExpression(exp); if (!hasError) { stmt->setPosition(t); } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } -WhileStatement * AlinousLang::whileStatement() {WhileStatement* stmt = new WhileStatement(); +WhileStatement * AlinousLang::whileStatement() {WhileStatement* stmt = new WhileStatement(); __STP(stmt); AbstractExpression* exp = nullptr; AbstractStatement* st = nullptr; Token* t = nullptr; @@ -2076,13 +2065,12 @@ stmt->setPosition(t); stmt->setStatement(st); stmt->setPosition(st); } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } -ReturnStatement * AlinousLang::returnStatement() {ReturnStatement* stmt = new ReturnStatement(); +ReturnStatement * AlinousLang::returnStatement() {ReturnStatement* stmt = new ReturnStatement(); __STP(stmt); AbstractExpression* exp = nullptr; Token* t = nullptr; if (!hasError) { @@ -2171,13 +2159,12 @@ stmt->setExpression(exp); if (!hasError) { stmt->setPosition(t); } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } -ContinueStatement * AlinousLang::continueStatement() {ContinueStatement* stmt = new ContinueStatement(); +ContinueStatement * AlinousLang::continueStatement() {ContinueStatement* stmt = new ContinueStatement(); __STP(stmt); Token* t = nullptr; if (!hasError) { t = jj_consume_token(CONTINUE); @@ -2191,13 +2178,12 @@ stmt->setPosition(t); if (!hasError) { stmt->setPosition(t); } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } -BreakStatement * AlinousLang::breakStatement() {BreakStatement* stmt = new BreakStatement(); +BreakStatement * AlinousLang::breakStatement() {BreakStatement* stmt = new BreakStatement(); __STP(stmt); Token* t = nullptr; if (!hasError) { t = jj_consume_token(BREAK); @@ -2211,13 +2197,12 @@ stmt->setPosition(t); if (!hasError) { stmt->setPosition(t); } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } -IfStatement * AlinousLang::ifStatement() {IfStatement* ifstmt = new IfStatement(); +IfStatement * AlinousLang::ifStatement() {IfStatement* ifstmt = new IfStatement(); __STP(ifstmt); AbstractExpression* exp; AbstractStatement* stmt; Token* t = nullptr; @@ -2285,13 +2270,12 @@ ifstmt->setElseStatement(stmt); ; } } -__ONERROR(ifstmt); - return ifstmt; +return __STP_MV(ifstmt); assert(false); } -IfStatement * AlinousLang::elseifStatement() {IfStatement* ifstmt = new IfStatement(); +IfStatement * AlinousLang::elseifStatement() {IfStatement* ifstmt = new IfStatement(); __STP(ifstmt); AbstractExpression* exp; AbstractStatement* stmt; Token* t = nullptr; @@ -2333,8 +2317,7 @@ ifstmt->setPosition(t); ifstmt->setStatement(stmt); ifstmt->setPosition(stmt); } -__ONERROR(ifstmt); - return ifstmt; +return __STP_MV(ifstmt); assert(false); } @@ -2358,10 +2341,15 @@ AbstractExpression * AlinousLang::conditionalOrExpression() {To ConditionalOrExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; if (!hasError) { left = conditionalAndExpression(); } if (!hasError) { +__left.reset(left); + } + if (!hasError) { while (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case LOGICAL_OR:{ @@ -2380,7 +2368,7 @@ if(exp == nullptr){ exp = new ConditionalOrExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(exp); } exp->setPosition(t); @@ -2398,8 +2386,7 @@ exp->addExp(right); if (!hasError) { } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -2408,10 +2395,15 @@ AbstractExpression * AlinousLang::conditionalAndExpression() {T ConditionalAndExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; if (!hasError) { left = orExpression(); } if (!hasError) { +__left.reset(left); + } + if (!hasError) { while (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case LOGICAL_AND:{ @@ -2430,7 +2422,7 @@ if(exp == nullptr){ exp = new ConditionalAndExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -2448,8 +2440,7 @@ exp->addExp(right); if (!hasError) { } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -2458,10 +2449,15 @@ AbstractExpression * AlinousLang::orExpression() {Token* t = nu OrExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; if (!hasError) { left = exclusiveOrExpression(); } if (!hasError) { +__left.reset(left); + } + if (!hasError) { while (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case BIT_OR:{ @@ -2480,7 +2476,7 @@ if(exp == nullptr){ exp = new OrExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -2498,8 +2494,7 @@ exp->addExp(right); if (!hasError) { } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -2508,10 +2503,15 @@ AbstractExpression * AlinousLang::exclusiveOrExpression() {Toke ExclusiveOrExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; if (!hasError) { left = andExpression(); } if (!hasError) { +__left.reset(left); + } + if (!hasError) { while (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case 191:{ @@ -2530,7 +2530,7 @@ if(exp == nullptr){ exp = new ExclusiveOrExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -2548,8 +2548,7 @@ exp->addExp(right); if (!hasError) { } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -2558,10 +2557,15 @@ AbstractExpression * AlinousLang::andExpression() {Token* t = n AndExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; if (!hasError) { left = equalityExpression(); } if (!hasError) { +__left.reset(left); + } + if (!hasError) { while (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case BIT_AND:{ @@ -2580,7 +2584,7 @@ if(exp == nullptr){ exp = new AndExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -2598,8 +2602,7 @@ exp->addExp(right); if (!hasError) { } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -2608,10 +2611,15 @@ AbstractExpression * AlinousLang::equalityExpression() {Token* EqualityExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; if (!hasError) { left = relationalExpression(); } if (!hasError) { +__left.reset(left); + } + if (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case CMP_EQUALS: case CMP_NOTEQUALS:{ @@ -2640,7 +2648,7 @@ exp = new EqualityExpression(); exp = new EqualityExpression(); exp->setPosition(left); exp->setLeft(left); - left = exp; + left = exp; __left.reset(left); exp->setPosition(t); exp->setOp(EqualityExpression::NOT_EQ); @@ -2670,8 +2678,7 @@ exp->setRight(right); if (!hasError) { } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -2680,10 +2687,15 @@ AbstractExpression * AlinousLang::relationalExpression() {Token RelationalExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; if (!hasError) { left = shiftExpression(); } if (!hasError) { +__left.reset(left); + } + if (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case GT: case GEQ: @@ -2699,7 +2711,7 @@ AbstractExpression * AlinousLang::relationalExpression() {Token exp = new RelationalExpression(); exp->setPosition(left); exp->setLeft(left); - left = exp; + left = exp; __left.reset(left); exp->setPosition(t); @@ -2715,7 +2727,7 @@ exp = new RelationalExpression(); exp = new RelationalExpression(); exp->setPosition(left); exp->setLeft(left); - left = exp; + left = exp; __left.reset(left); exp->setPosition(t); exp->setOp(RelationalExpression::GT_EQ); @@ -2730,7 +2742,7 @@ exp = new RelationalExpression(); exp = new RelationalExpression(); exp->setPosition(left); exp->setLeft(left); - left = exp; + left = exp; __left.reset(left); exp->setPosition(t); @@ -2746,7 +2758,7 @@ exp = new RelationalExpression(); exp = new RelationalExpression(); exp->setPosition(left); exp->setLeft(left); - left = exp; + left = exp; __left.reset(left); exp->setPosition(t); exp->setOp(RelationalExpression::LT_EQ); @@ -2776,8 +2788,7 @@ exp->setRight(right); if (!hasError) { } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -2786,10 +2797,15 @@ AbstractExpression * AlinousLang::shiftExpression() {Token* t = ShiftExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; if (!hasError) { left = additiveExpression(); } if (!hasError) { +__left.reset(left); + } + if (!hasError) { while (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case RSIGNEDSHIFT: @@ -2812,7 +2828,7 @@ if(exp == nullptr){ exp = new ShiftExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -2829,7 +2845,7 @@ if(exp == nullptr){ exp = new ShiftExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -2856,8 +2872,7 @@ exp->addExp(right); if (!hasError) { } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -2866,10 +2881,15 @@ AbstractExpression * AlinousLang::additiveExpression() {Token* AddExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; if (!hasError) { left = multiplicativeExpression(); } if (!hasError) { +__left.reset(left); + } + if (!hasError) { while (!hasError) { if (jj_2_11(2)) { ; @@ -2887,7 +2907,7 @@ if(exp == nullptr){ exp = new AddExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -2904,7 +2924,7 @@ if(exp == nullptr){ exp = new AddExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -2931,8 +2951,7 @@ exp->addExp(right); if (!hasError) { } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -2941,10 +2960,15 @@ AbstractExpression * AlinousLang::multiplicativeExpression() {T MultiplicativeExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; if (!hasError) { left = negateExpression(); } if (!hasError) { +__left.reset(left); + } + if (!hasError) { while (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case ASTERISK: @@ -2968,7 +2992,7 @@ if(exp == nullptr){ exp = new MultiplicativeExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->addOpe(MultiplicativeExpression::MUL); exp->setPosition(t); @@ -3000,7 +3024,7 @@ if(exp == nullptr){ exp = new MultiplicativeExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->addOpe(MultiplicativeExpression::MOD); exp->setPosition(t); @@ -3026,8 +3050,7 @@ exp->addExp(right); if (!hasError) { } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -3036,6 +3059,8 @@ AbstractExpression * AlinousLang::negateExpression() {Token* t NegateExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; if (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case MINUS:{ @@ -3045,7 +3070,7 @@ AbstractExpression * AlinousLang::negateExpression() {Token* t if (!hasError) { exp = new NegateExpression(); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } break; } @@ -3059,15 +3084,14 @@ exp = new NegateExpression(); } if (!hasError) { if(left==nullptr){ - left = right; + left = right; __left.reset(left); } else{ exp->setExpression(right); exp->setPosition(right); } } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -3075,10 +3099,15 @@ assert(false); AbstractExpression * AlinousLang::postIncrementExpression() {Token* t = nullptr; PostIncrementExpression* exp = nullptr; AbstractExpression* left = nullptr; + + StackRelease __left; if (!hasError) { left = preIncrementExpression(); } if (!hasError) { +__left.reset(left); + } + if (!hasError) { if (jj_2_12(2)) { if (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { @@ -3092,7 +3121,7 @@ exp = new PostIncrementExpression(); exp->setOpe(PostIncrementExpression::MINUS); exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } break; } @@ -3106,7 +3135,7 @@ exp = new PostIncrementExpression(); exp->setOpe(PostIncrementExpression::PLUS); exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } break; } @@ -3123,8 +3152,7 @@ exp = new PostIncrementExpression(); if (!hasError) { } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -3133,6 +3161,8 @@ AbstractExpression * AlinousLang::preIncrementExpression() {Tok PreIncrementExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; if (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case PLUSPLUS: @@ -3147,7 +3177,7 @@ AbstractExpression * AlinousLang::preIncrementExpression() {Tok exp = new PreIncrementExpression(); exp->setOpe(PreIncrementExpression::MINUS); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } break; } @@ -3159,7 +3189,7 @@ exp = new PreIncrementExpression(); exp = new PreIncrementExpression(); exp->setOpe(PreIncrementExpression::PLUS); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } break; } @@ -3181,15 +3211,14 @@ exp = new PreIncrementExpression(); } if (!hasError) { if(left==nullptr){ - left = right; + left = right; __left.reset(left); } else{ exp->setExpression(right); exp->setPosition(right); } } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -3198,6 +3227,8 @@ AbstractExpression * AlinousLang::bitReverseExpression() {Token BitReverseExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; if (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case 193:{ @@ -3207,7 +3238,7 @@ AbstractExpression * AlinousLang::bitReverseExpression() {Token if (!hasError) { exp = new BitReverseExpression(); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } break; } @@ -3221,15 +3252,14 @@ exp = new BitReverseExpression(); } if (!hasError) { if(left==nullptr){ - left = right; + left = right; __left.reset(left); } else{ exp->setExpression(right); exp->setPosition(right); } } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -3238,6 +3268,8 @@ AbstractExpression * AlinousLang::notExpression() {Token* t = n NotExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; if (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case NOT:{ @@ -3247,7 +3279,7 @@ AbstractExpression * AlinousLang::notExpression() {Token* t = n if (!hasError) { exp = new NotExpression(); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } break; } @@ -3261,15 +3293,14 @@ exp = new NotExpression(); } if (!hasError) { if(left==nullptr){ - left = right; + left = right; __left.reset(left); } else{ exp->setExpression(right); exp->setPosition(right); } } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -3279,6 +3310,8 @@ AbstractExpression * AlinousLang::castExpression() {Token* t = AbstractType* type = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; if (!hasError) { if (jj_2_13(3)) { if (!hasError) { @@ -3288,7 +3321,7 @@ AbstractExpression * AlinousLang::castExpression() {Token* t = if (!hasError) { exp = new CastExpression(); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } if (!hasError) { type = typeDeclare(); @@ -3371,7 +3404,7 @@ exp->setExpression(right); right = memberReferenceExpression(); } if (!hasError) { -left = right; +left = right; __left.reset(left); } } break; @@ -3383,8 +3416,7 @@ left = right; } } } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -3393,10 +3425,15 @@ AbstractExpression * AlinousLang::memberReferenceExpression() { Token* t = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; if (!hasError) { left = arrayReferenceExpression(); } if (!hasError) { +__left.reset(left); + } + if (!hasError) { while (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case DOT:{ @@ -3418,7 +3455,7 @@ if(exp == nullptr){ exp = new MemberReferenceExpression(); exp->addExp(left); exp->setPosition(left); - left = exp; + left = exp; __left.reset(left); } exp->addExp(right); @@ -3430,8 +3467,7 @@ if(exp == nullptr){ if (!hasError) { } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -3440,10 +3476,15 @@ AbstractExpression * AlinousLang::arrayReferenceExpression() {A Token* t = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; if (!hasError) { left = functionCallExpression(); } if (!hasError) { +__left.reset(left); + } + if (!hasError) { while (!hasError) { if (jj_2_14(2)) { ; @@ -3458,7 +3499,7 @@ if(exp == nullptr){ exp = new ArrayReferenceExpression(); exp->setExp(left); exp->setPosition(left); - left = exp; + left = exp; __left.reset(left); } } if (!hasError) { @@ -3477,8 +3518,7 @@ exp->addIndex(right); if (!hasError) { } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -3486,10 +3526,15 @@ assert(false); AbstractExpression * AlinousLang::functionCallExpression() {FunctionCallExpression* exp = nullptr; Token* t = nullptr; AbstractExpression* left = nullptr; + + StackRelease __left; if (!hasError) { left = primitive(); } if (!hasError) { +__left.reset(left); + } + if (!hasError) { if (jj_2_15(2)) { if (!hasError) { t = jj_consume_token(L_PARENTHESIS); @@ -3500,7 +3545,7 @@ exp = new FunctionCallExpression(); exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } if (!hasError) { functionCallExpressionArg(exp); @@ -3518,8 +3563,7 @@ exp->setPosition(t); if (!hasError) { } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -3736,11 +3780,13 @@ AllocationExpression * AlinousLang::allocationExpression() {A Token* t = nullptr; AbstractType* type = nullptr; + + StackRelease __exp; if (!hasError) { t = jj_consume_token(NEW); } if (!hasError) { -exp = new AllocationExpression(); +exp = new AllocationExpression(); __exp.reset(exp); exp->setPosition(t); } if (!hasError) { @@ -3776,13 +3822,12 @@ exp->setPosition(ar); } } } -__ONERROR(exp); - return exp; +return __exp.move(); assert(false); } -ConstructorArray * AlinousLang::constructorArray(AbstractType* type) {ConstructorArray* exp = new ConstructorArray(); +ConstructorArray * AlinousLang::constructorArray(AbstractType* type) {ConstructorArray* exp = new ConstructorArray(); __STP(exp); Token* t = nullptr; AbstractExpression* dim = nullptr; @@ -3820,13 +3865,12 @@ exp->setPosition(t); if (!hasError) { } -__ONERROR(exp); - return exp; +return __STP_MV(exp); assert(false); } -ConstructorCall * AlinousLang::constructorCallExpression(AbstractType* type) {ConstructorCall* exp = new ConstructorCall(); +ConstructorCall * AlinousLang::constructorCallExpression(AbstractType* type) {ConstructorCall* exp = new ConstructorCall(); __STP(exp); Token* t = nullptr; exp->setName(type); @@ -3846,8 +3890,7 @@ exp->setPosition(t); if (!hasError) { exp->setPosition(t); } -__ONERROR(exp); - return exp; +return __STP_MV(exp); assert(false); } @@ -3958,7 +4001,7 @@ exp->addArgument(arg); } -ParenthesisExpression * AlinousLang::parenthesisExpression() {ParenthesisExpression* exp = new ParenthesisExpression(); +ParenthesisExpression * AlinousLang::parenthesisExpression() {ParenthesisExpression* exp = new ParenthesisExpression(); __STP(exp); AbstractExpression* e = nullptr; Token* t = nullptr; if (!hasError) { @@ -3980,13 +4023,12 @@ exp->setExp(e); if (!hasError) { exp->setPosition(t); } -__ONERROR(exp); - return exp; +return __STP_MV(exp); assert(false); } -VariableIdentifier * AlinousLang::variableIdentifier() {VariableIdentifier* valId = new VariableIdentifier(); +VariableIdentifier * AlinousLang::variableIdentifier() {VariableIdentifier* valId = new VariableIdentifier(); __STP(valId); Token* t = nullptr; if (!hasError) { t = identifierName(); @@ -3994,8 +4036,7 @@ VariableIdentifier * AlinousLang::variableIdentifier() {Variabl if (!hasError) { valId->setName(_STR(t)); } -__ONERROR(valId); - return valId; +return __STP_MV(valId); assert(false); } @@ -4315,7 +4356,7 @@ assert(false); } -NullLiteral * AlinousLang::nullLiteral() {NullLiteral* lit = new NullLiteral(); +NullLiteral * AlinousLang::nullLiteral() {NullLiteral* lit = new NullLiteral(); __STP(lit); Token* t = nullptr; if (!hasError) { t = jj_consume_token(_NULL); @@ -4323,13 +4364,12 @@ NullLiteral * AlinousLang::nullLiteral() {NullLiteral* lit = new NullL if (!hasError) { lit->setPositions(t, t); } -__ONERROR(lit); - return lit; +return __STP_MV(lit); assert(false); } -NumberLiteral * AlinousLang::numberLiteral() {NumberLiteral* lit = new NumberLiteral(); +NumberLiteral * AlinousLang::numberLiteral() {NumberLiteral* lit = new NumberLiteral(); __STP(lit); Token* t = nullptr; if (!hasError) { t = jj_consume_token(INTEGER_LITERAL); @@ -4338,13 +4378,12 @@ NumberLiteral * AlinousLang::numberLiteral() {NumberLiteral* lit = n lit->setValue(_STR(t)); lit->setPositions(t, t); } -__ONERROR(lit); - return lit; +return __STP_MV(lit); assert(false); } -BooleanLiteral * AlinousLang::booleanLiteral() {BooleanLiteral* lit = new BooleanLiteral(); +BooleanLiteral * AlinousLang::booleanLiteral() {BooleanLiteral* lit = new BooleanLiteral(); __STP(lit); Token* t = nullptr; if (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { @@ -4375,13 +4414,12 @@ lit->setValue(false); if (!hasError) { lit->setPositions(t, t); } -__ONERROR(lit); - return lit; +return __STP_MV(lit); assert(false); } -LiteralExpression * AlinousLang::literalExpression() {LiteralExpression* lit = new LiteralExpression(); +LiteralExpression * AlinousLang::literalExpression() {LiteralExpression* lit = new LiteralExpression(); __STP(lit); Token* t = nullptr; if (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { @@ -4412,8 +4450,7 @@ lit->setString(_STR(t), false); if (!hasError) { lit->setPositions(t, t); } -__ONERROR(lit); - return lit; +return __STP_MV(lit); assert(false); } @@ -4454,7 +4491,7 @@ assert(false); } -AlterTableStatement * AlinousLang::alterTableStatement() {AlterTableStatement* stmt = new AlterTableStatement(); +AlterTableStatement * AlinousLang::alterTableStatement() {AlterTableStatement* stmt = new AlterTableStatement(); __STP(stmt); TableIdentifier* tableId = nullptr; AbstractAlterDdlCommand* cmd = nullptr; Token* t = null; @@ -4490,8 +4527,7 @@ stmt->setPosition(cmd); if (!hasError) { stmt->setPosition(t); } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } @@ -4529,8 +4565,7 @@ AbstractAlterDdlCommand * AlinousLang::alterCommands() {Ab errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } } -__ONERROR(cmd); - return cmd; +return cmd; assert(false); } @@ -4560,13 +4595,12 @@ AbstractAlterDdlCommand * AlinousLang::alterRenameCommands errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } } -__ONERROR(cmd); - return cmd; +return cmd; assert(false); } -AlterRenameTableCommand * AlinousLang::alterRenameTableCommand(Token* t) {AlterRenameTableCommand* cmd = new AlterRenameTableCommand(); +AlterRenameTableCommand * AlinousLang::alterRenameTableCommand(Token* t) {AlterRenameTableCommand* cmd = new AlterRenameTableCommand(); __STP(cmd); cmd->setPosition(t); TableIdentifier* tableId = nullptr; @@ -4583,13 +4617,12 @@ cmd->setPosition(t); cmd->setPosition(t); cmd->setNewName(tableId); } -__ONERROR(cmd); - return cmd; +return __STP_MV(cmd); assert(false); } -AlterRenameColumnCommand * AlinousLang::alterRenameColumnCommand(Token* t) {AlterRenameColumnCommand* cmd = new AlterRenameColumnCommand(); +AlterRenameColumnCommand * AlinousLang::alterRenameColumnCommand(Token* t) {AlterRenameColumnCommand* cmd = new AlterRenameColumnCommand(); __STP(cmd); cmd->setPosition(t); if (!hasError) { t = jj_consume_token(IDENTIFIER); @@ -4611,13 +4644,12 @@ cmd->setPosition(t); cmd->setPosition(t); cmd->setNewName(_STR(t)); } -__ONERROR(cmd); - return cmd; +return __STP_MV(cmd); assert(false); } -AlterModifyCommand * AlinousLang::alterModifyCommand() {AlterModifyCommand* cmd = new AlterModifyCommand(); +AlterModifyCommand * AlinousLang::alterModifyCommand() {AlterModifyCommand* cmd = new AlterModifyCommand(); __STP(cmd); DdlColumnDescriptor* desc = nullptr; Token* t = nullptr; if (!hasError) { @@ -4633,8 +4665,7 @@ cmd->setPosition(t); cmd->setPosition(desc); cmd->setColumnDescriptor(desc); } -__ONERROR(cmd); - return cmd; +return __STP_MV(cmd); assert(false); } @@ -4671,13 +4702,12 @@ AbstractAlterDdlCommand * AlinousLang::dropAlterCommands() errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } } -__ONERROR(cmd); - return cmd; +return cmd; assert(false); } -AlterDropPrimaryKeyCommand * AlinousLang::alterDropPrimaryKeyCommand(Token* t) {AlterDropPrimaryKeyCommand* cmd = new AlterDropPrimaryKeyCommand(); +AlterDropPrimaryKeyCommand * AlinousLang::alterDropPrimaryKeyCommand(Token* t) {AlterDropPrimaryKeyCommand* cmd = new AlterDropPrimaryKeyCommand(); __STP(cmd); cmd->setPosition(t); if (!hasError) { t = jj_consume_token(PRIMARY); @@ -4691,13 +4721,12 @@ cmd->setPosition(t); if (!hasError) { cmd->setPosition(t); } -__ONERROR(cmd); - return cmd; +return __STP_MV(cmd); assert(false); } -AlterDropIndexCommand * AlinousLang::alterDropIndexCommand(Token* t) {AlterDropIndexCommand* cmd = new AlterDropIndexCommand(); +AlterDropIndexCommand * AlinousLang::alterDropIndexCommand(Token* t) {AlterDropIndexCommand* cmd = new AlterDropIndexCommand(); __STP(cmd); cmd->setPosition(t); if (!hasError) { t = jj_consume_token(INDEX); @@ -4712,13 +4741,12 @@ cmd->setPosition(t); cmd->setPosition(t); cmd->setName(_STR(t)); } -__ONERROR(cmd); - return cmd; +return __STP_MV(cmd); assert(false); } -AlterDropColumnCommand * AlinousLang::alterDropColumnCommand(Token* t) {AlterDropColumnCommand* cmd = new AlterDropColumnCommand(); +AlterDropColumnCommand * AlinousLang::alterDropColumnCommand(Token* t) {AlterDropColumnCommand* cmd = new AlterDropColumnCommand(); __STP(cmd); cmd->setPosition(t); if (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { @@ -4743,8 +4771,7 @@ cmd->setPosition(t); cmd->setPosition(t); cmd->setName(_STR(t)); } -__ONERROR(cmd); - return cmd; +return __STP_MV(cmd); assert(false); } @@ -4782,13 +4809,12 @@ AbstractAlterDdlCommand * AlinousLang::addAlterCommands() errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } } -__ONERROR(cmd); - return cmd; +return cmd; assert(false); } -AlterAddPrimaryKeyCommand * AlinousLang::alterAddPrimaryKeyCommand(Token* t) {AlterAddPrimaryKeyCommand* cmd = new AlterAddPrimaryKeyCommand(); +AlterAddPrimaryKeyCommand * AlinousLang::alterAddPrimaryKeyCommand(Token* t) {AlterAddPrimaryKeyCommand* cmd = new AlterAddPrimaryKeyCommand(); __STP(cmd); cmd->setPosition(t); if (!hasError) { @@ -4849,13 +4875,12 @@ cmd->setPosition(t); if (!hasError) { cmd->setPosition(t); } -__ONERROR(cmd); - return cmd; +return __STP_MV(cmd); assert(false); } -AlterAddColumnCommand * AlinousLang::alterAddColumnCommand(Token* __t) {AlterAddColumnCommand* cmd = new AlterAddColumnCommand(); +AlterAddColumnCommand * AlinousLang::alterAddColumnCommand(Token* __t) {AlterAddColumnCommand* cmd = new AlterAddColumnCommand(); __STP(cmd); DdlColumnDescriptor* desc = nullptr; cmd->setPosition(__t); @@ -4883,13 +4908,12 @@ cmd->setPosition(t); cmd->setPosition(desc); cmd->setColumnDescriptor(desc); } -__ONERROR(cmd); - return cmd; +return __STP_MV(cmd); assert(false); } -AlterAddIndexCommand * AlinousLang::alterAddIndexCommand(Token* t) {AlterAddIndexCommand* cmd = new AlterAddIndexCommand(); +AlterAddIndexCommand * AlinousLang::alterAddIndexCommand(Token* t) {AlterAddIndexCommand* cmd = new AlterAddIndexCommand(); __STP(cmd); cmd->setPosition(t); if (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { @@ -4967,13 +4991,12 @@ cmd->setPosition(t); if (!hasError) { cmd->setPosition(t); } -__ONERROR(cmd); - return cmd; +return __STP_MV(cmd); assert(false); } -CreateTableStatement * AlinousLang::createTableStatement() {CreateTableStatement* stmt = new CreateTableStatement(); +CreateTableStatement * AlinousLang::createTableStatement() {CreateTableStatement* stmt = new CreateTableStatement(); __STP(stmt); DdlColumnDescriptor* desc = nullptr; Token* t = null; if (!hasError) { @@ -5136,13 +5159,12 @@ stmt->setPosition(t); if (!hasError) { stmt->setPosition(t); } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } -DdlColumnDescriptor * AlinousLang::ddlColumnDescriptor() {DdlColumnDescriptor* desc = new DdlColumnDescriptor(); +DdlColumnDescriptor * AlinousLang::ddlColumnDescriptor() {DdlColumnDescriptor* desc = new DdlColumnDescriptor(); __STP(desc); ColumnTypeDescriptor* typeDesc = nullptr; AbstractSQLExpression* val = nullptr; Token* t = nullptr; @@ -5249,13 +5271,12 @@ desc->setDefaultValue(val); ; } } -__ONERROR(desc); - return desc; +return __STP_MV(desc); assert(false); } -ColumnTypeDescriptor * AlinousLang::columnTypeDescriptor() {ColumnTypeDescriptor* typeDesc = new ColumnTypeDescriptor(); +ColumnTypeDescriptor * AlinousLang::columnTypeDescriptor() {ColumnTypeDescriptor* typeDesc = new ColumnTypeDescriptor(); __STP(typeDesc); AbstractSQLExpression* val = nullptr; Token* t1 = nullptr; Token* t2 = nullptr; @@ -5350,13 +5371,12 @@ typeDesc->setPosition(t2); ; } } -__ONERROR(typeDesc); - return typeDesc; +return __STP_MV(typeDesc); assert(false); } -DropTableStatement * AlinousLang::dropTableStatement() {DropTableStatement* stmt = new DropTableStatement(); +DropTableStatement * AlinousLang::dropTableStatement() {DropTableStatement* stmt = new DropTableStatement(); __STP(stmt); Token* t = null; TableIdentifier* tableId = nullptr; if (!hasError) { @@ -5384,8 +5404,7 @@ stmt->setTableId(tableId); if (!hasError) { stmt->setPosition(t); } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } @@ -5450,7 +5469,7 @@ assert(false); } -SelectStatement * AlinousLang::selectStatement() {SelectStatement* stmt = new SelectStatement(); +SelectStatement * AlinousLang::selectStatement() {SelectStatement* stmt = new SelectStatement(); __STP(stmt); Token* t = nullptr; SQLSelectTargetList* expList = nullptr; SQLFrom* from = nullptr; @@ -5565,13 +5584,12 @@ stmt->setLimitOffset(limitOffset); if (!hasError) { stmt->setPosition(t); } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } -SQLSelectTargetList * AlinousLang::sqlSelectTargetList() {SQLSelectTargetList* stmt = new SQLSelectTargetList(); +SQLSelectTargetList * AlinousLang::sqlSelectTargetList() {SQLSelectTargetList* stmt = new SQLSelectTargetList(); __STP(stmt); Token* t = nullptr; SQLSelectTarget* target = nullptr; if (!hasError) { @@ -5611,13 +5629,12 @@ stmt->addTarget(target); if (!hasError) { } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } -SQLSelectTarget * AlinousLang::sqlSelectTarget() {SQLSelectTarget* stmt = new SQLSelectTarget(); +SQLSelectTarget * AlinousLang::sqlSelectTarget() {SQLSelectTarget* stmt = new SQLSelectTarget(); __STP(stmt); Token* t = nullptr; AbstractSQLExpression* exp = nullptr; if (!hasError) { @@ -5657,13 +5674,12 @@ stmt->setAsName(_STR(t)); if (!hasError) { } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } -SQLGroupBy * AlinousLang::sqlGroupBy() {SQLGroupBy* stmt = new SQLGroupBy(); +SQLGroupBy * AlinousLang::sqlGroupBy() {SQLGroupBy* stmt = new SQLGroupBy(); __STP(stmt); Token* t = nullptr; SQLColumnsList* columns = nullptr; SQLHaving* having = nullptr; @@ -5706,8 +5722,7 @@ stmt->setHaving(having); if (!hasError) { } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } @@ -5734,7 +5749,7 @@ assert(false); } -SQLOrderBy * AlinousLang::sqlOrderBy() {SQLOrderBy* stmt = new SQLOrderBy(); +SQLOrderBy * AlinousLang::sqlOrderBy() {SQLOrderBy* stmt = new SQLOrderBy(); __STP(stmt); Token* t = nullptr; SQLColumnsList* columns = nullptr; if (!hasError) { @@ -5756,13 +5771,12 @@ stmt->setPosition(t); stmt->setList(columns); stmt->setPosition(columns); } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } -SQLLimitOffset * AlinousLang::sqlLimitOffset() {SQLLimitOffset* stmt = new SQLLimitOffset(); +SQLLimitOffset * AlinousLang::sqlLimitOffset() {SQLLimitOffset* stmt = new SQLLimitOffset(); __STP(stmt); Token* t = nullptr; AbstractSQLExpression* exp = nullptr; if (!hasError) { @@ -5814,13 +5828,12 @@ stmt->setOffset(exp); if (!hasError) { } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } -UpdateStatement * AlinousLang::updateStatement() {UpdateStatement* stmt = new UpdateStatement(); +UpdateStatement * AlinousLang::updateStatement() {UpdateStatement* stmt = new UpdateStatement(); __STP(stmt); Token* t = nullptr; TableIdentifier* tableId = nullptr; SQLSet* set = nullptr; @@ -5868,13 +5881,12 @@ stmt->setWhere(where); if (!hasError) { stmt->setPosition(t); } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } -SQLSet * AlinousLang::sqlSet() {SQLSet* stmt = new SQLSet(); +SQLSet * AlinousLang::sqlSet() {SQLSet* stmt = new SQLSet(); __STP(stmt); Token* t = nullptr; SQLSetPair* pair = nullptr; if (!hasError) { @@ -5920,13 +5932,12 @@ stmt->addPair(pair); if (!hasError) { } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } -SQLSetPair * AlinousLang::sqlSetPair() {SQLSetPair* stmt = new SQLSetPair(); +SQLSetPair * AlinousLang::sqlSetPair() {SQLSetPair* stmt = new SQLSetPair(); __STP(stmt); Token* t = nullptr; SQLColumnIdentifier* colId = nullptr; AbstractSQLExpression* ex = nullptr; @@ -5950,13 +5961,12 @@ stmt->setPosition(t); stmt->setExpression(ex); stmt->setPosition(ex); } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } -InsertStatement * AlinousLang::insertStatement() {InsertStatement* stmt = new InsertStatement(); +InsertStatement * AlinousLang::insertStatement() {InsertStatement* stmt = new InsertStatement(); __STP(stmt); Token* t = nullptr; TableIdentifier* tableId = nullptr; SQLColumnsList* columns = nullptr; @@ -6040,13 +6050,12 @@ stmt->setPosition(t); if (!hasError) { stmt->setPosition(t); } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } -SQLColumnsList * AlinousLang::sqlColumnsList() {SQLColumnsList* stmt = new SQLColumnsList(); +SQLColumnsList * AlinousLang::sqlColumnsList() {SQLColumnsList* stmt = new SQLColumnsList(); __STP(stmt); Token* t = nullptr; SQLColumnIdentifier* colId = nullptr; if (!hasError) { @@ -6086,13 +6095,12 @@ stmt->addColumn(colId); if (!hasError) { } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } -DeleteStatement * AlinousLang::deleteStatement() {DeleteStatement* stmt = new DeleteStatement(); +DeleteStatement * AlinousLang::deleteStatement() {DeleteStatement* stmt = new DeleteStatement(); __STP(stmt); Token* t = nullptr; SQLFrom* from = nullptr; SQLWhere* where = nullptr; @@ -6132,13 +6140,12 @@ stmt->setWhere(where); if (!hasError) { stmt->setPosition(t); } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } -SQLWhere * AlinousLang::sqlWhere() {SQLWhere* stmt = new SQLWhere(); +SQLWhere * AlinousLang::sqlWhere() {SQLWhere* stmt = new SQLWhere(); __STP(stmt); Token* t = nullptr; AbstractSQLExpression* exp = nullptr; if (!hasError) { @@ -6154,13 +6161,12 @@ stmt->setPosition(t); stmt->setExpression(exp); stmt->setPosition(exp); } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } -SQLFrom * AlinousLang::sqlFrom() {SQLFrom* stmt = new SQLFrom(); +SQLFrom * AlinousLang::sqlFrom() {SQLFrom* stmt = new SQLFrom(); __STP(stmt); Token* t = nullptr; AbstractJoinPart* tableId = nullptr; if (!hasError) { @@ -6176,13 +6182,12 @@ stmt->setPosition(t); stmt->setTable(tableId); stmt->setPosition(tableId); } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } -BeginStatement * AlinousLang::beginStatement() {BeginStatement* stmt = new BeginStatement(); +BeginStatement * AlinousLang::beginStatement() {BeginStatement* stmt = new BeginStatement(); __STP(stmt); Token* t = null; if (!hasError) { t = jj_consume_token(BEGIN); @@ -6196,13 +6201,12 @@ stmt->setPosition(t); if (!hasError) { stmt->setPosition(t); } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } -CommitStatement * AlinousLang::commitStatement() {CommitStatement* stmt = new CommitStatement(); +CommitStatement * AlinousLang::commitStatement() {CommitStatement* stmt = new CommitStatement(); __STP(stmt); Token* t = null; if (!hasError) { t = jj_consume_token(COMMIT); @@ -6216,13 +6220,12 @@ stmt->setPosition(t); if (!hasError) { stmt->setPosition(t); } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } -RollbackStatement * AlinousLang::rollbackStatement() {RollbackStatement* stmt = new RollbackStatement(); +RollbackStatement * AlinousLang::rollbackStatement() {RollbackStatement* stmt = new RollbackStatement(); __STP(stmt); Token* t = null; if (!hasError) { t = jj_consume_token(ROLLBACK); @@ -6236,8 +6239,7 @@ stmt->setPosition(t); if (!hasError) { stmt->setPosition(t); } -__ONERROR(stmt); - return stmt; +return __STP_MV(stmt); assert(false); } @@ -6261,10 +6263,15 @@ AbstractSQLExpression * AlinousLang::sqlOrExpression() {SQLO Token* t = nullptr; AbstractSQLExpression* left = nullptr; AbstractSQLExpression* right = nullptr; + + StackRelease __left; if (!hasError) { left = sqlAndExpression(); } if (!hasError) { +__left.reset(left); + } + if (!hasError) { while (!hasError) { if (jj_2_18(2)) { ; @@ -6279,7 +6286,7 @@ if(exp == nullptr){ exp = new SQLOrExpression(); exp->addOperand(left); exp->setPosition(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -6297,8 +6304,7 @@ exp->addOperand(right); if (!hasError) { } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -6307,10 +6313,15 @@ AbstractSQLExpression * AlinousLang::sqlAndExpression() {SQL Token* t = nullptr; AbstractSQLExpression* left = nullptr; AbstractSQLExpression* right = nullptr; + + StackRelease __left; if (!hasError) { left = sqlNotExpression(); } if (!hasError) { +__left.reset(left); + } + if (!hasError) { while (!hasError) { if (jj_2_19(2)) { ; @@ -6325,7 +6336,7 @@ if(exp == nullptr){ exp = new SQLAndExpression(); exp->addOperand(left); exp->setPosition(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -6343,8 +6354,7 @@ exp->addOperand(right); if (!hasError) { } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -6353,6 +6363,8 @@ AbstractSQLExpression * AlinousLang::sqlNotExpression() {SQL Token* t = nullptr; AbstractSQLExpression* left = nullptr; AbstractSQLExpression* right = nullptr; + + StackRelease __left; if (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case SQL_NOT:{ @@ -6362,7 +6374,7 @@ AbstractSQLExpression * AlinousLang::sqlNotExpression() {SQL if (!hasError) { exp = new SQLNotExpression(); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } break; } @@ -6376,15 +6388,14 @@ exp = new SQLNotExpression(); } if (!hasError) { if(left == nullptr){ - left = right; + left = right; __left.reset(left); } else{ exp->setExpression(right); exp->setPosition(right); } } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -6393,10 +6404,15 @@ AbstractSQLExpression * AlinousLang::sqlLikeExpression() {SQ Token* t = nullptr; AbstractSQLExpression* left = nullptr; SQLLiteral* right = nullptr; + + StackRelease __left; if (!hasError) { left = sqlIsNullExpression(); } if (!hasError) { +__left.reset(left); + } + if (!hasError) { if (jj_2_20(2)) { if (!hasError) { t = jj_consume_token(LIKE); @@ -6407,7 +6423,7 @@ exp = new SQLLikeExpression(); exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } if (!hasError) { right = sqlLiteral(); @@ -6446,8 +6462,7 @@ exp->setEscape(right); if (!hasError) { } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -6456,10 +6471,15 @@ AbstractSQLExpression * AlinousLang::sqlIsNullExpression() { Token* t = nullptr; AbstractSQLExpression* left = nullptr; AbstractSQLExpression* right = nullptr; + + StackRelease __left; if (!hasError) { left = sqlBetweenExpression(); } if (!hasError) { +__left.reset(left); + } + if (!hasError) { if (jj_2_21(2)) { if (!hasError) { t = jj_consume_token(IS); @@ -6470,7 +6490,7 @@ exp = new SQLIsNullExpression(); exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } if (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { @@ -6502,8 +6522,7 @@ exp->setPosition(t); if (!hasError) { } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -6512,10 +6531,15 @@ AbstractSQLExpression * AlinousLang::sqlBetweenExpression() Token* t = nullptr; AbstractSQLExpression* left = nullptr; AbstractSQLExpression* right = nullptr; + + StackRelease __left; if (!hasError) { left = sqlInExpression(); } if (!hasError) { +__left.reset(left); + } + if (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case BETWEEN:{ if (!hasError) { @@ -6527,7 +6551,7 @@ exp = new SQLBetweenExpression(); exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } if (!hasError) { right = sqlAdditiveExpression(); @@ -6559,8 +6583,7 @@ exp->setEnd(right); if (!hasError) { } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -6569,10 +6592,15 @@ AbstractSQLExpression * AlinousLang::sqlInExpression() {SQLI Token* t = nullptr; AbstractSQLExpression* left = nullptr; SQLExpressionList* list = nullptr; + + StackRelease __left; if (!hasError) { left = sqlRelationalExpression(); } if (!hasError) { +__left.reset(left); + } + if (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case IN:{ if (!hasError) { @@ -6584,7 +6612,7 @@ exp = new SQLInExpression(); exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } if (!hasError) { t = jj_consume_token(L_PARENTHESIS); @@ -6614,8 +6642,7 @@ exp->setPosition(t); if (!hasError) { } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -6624,10 +6651,15 @@ AbstractSQLExpression * AlinousLang::sqlRelationalExpression Token* t = nullptr; AbstractSQLExpression* left = nullptr; AbstractSQLExpression* right = nullptr; + + StackRelease __left; if (!hasError) { left = sqlEqualityExpression(); } if (!hasError) { +__left.reset(left); + } + if (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case GT: case GEQ: @@ -6646,7 +6678,7 @@ exp = new SQLRelationalExpression(); exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } break; } @@ -6661,7 +6693,7 @@ exp = new SQLRelationalExpression(); exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } break; } @@ -6676,7 +6708,7 @@ exp = new SQLRelationalExpression(); exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } break; } @@ -6691,7 +6723,7 @@ exp = new SQLRelationalExpression(); exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } break; } @@ -6718,8 +6750,7 @@ exp->setRight(right); if (!hasError) { } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -6728,10 +6759,15 @@ AbstractSQLExpression * AlinousLang::sqlEqualityExpression() Token* t = nullptr; AbstractSQLExpression* left = nullptr; AbstractSQLExpression* right = nullptr; + + StackRelease __left; if (!hasError) { left = sqlAdditiveExpression(); } if (!hasError) { +__left.reset(left); + } + if (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case EQUALS: case CMP_NOTEQUALS: @@ -6749,7 +6785,7 @@ exp = new SQLEqualityExpression(); exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } break; } @@ -6764,7 +6800,7 @@ exp = new SQLEqualityExpression(); exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } break; } @@ -6779,7 +6815,7 @@ exp = new SQLEqualityExpression(); exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } break; } @@ -6806,8 +6842,7 @@ exp->setRight(right); if (!hasError) { } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -6816,10 +6851,15 @@ AbstractSQLExpression * AlinousLang::sqlAdditiveExpression() Token* t = nullptr; AbstractSQLExpression* left = nullptr; AbstractSQLExpression* right = nullptr; + + StackRelease __left; if (!hasError) { left = sqlMultiplicativeExpression(); } if (!hasError) { +__left.reset(left); + } + if (!hasError) { while (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case PLUS: @@ -6842,7 +6882,7 @@ if(exp == nullptr){ exp = new SQLAdditiveExpression(); exp->addOperand(left); exp->setPosition(left); - left = exp; + left = exp; __left.reset(left); } exp->addOpe(SQLAdditiveExpression::ADD); exp->setPosition(t); @@ -6858,7 +6898,7 @@ if(exp == nullptr){ exp = new SQLAdditiveExpression(); exp->addOperand(left); exp->setPosition(left); - left = exp; + left = exp; __left.reset(left); } exp->addOpe(SQLAdditiveExpression::SUB); exp->setPosition(t); @@ -6884,8 +6924,7 @@ exp->addOperand(right); if (!hasError) { } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -6894,10 +6933,15 @@ AbstractSQLExpression * AlinousLang::sqlMultiplicativeExpres Token* t = nullptr; AbstractSQLExpression* left = nullptr; AbstractSQLExpression* right = nullptr; + + StackRelease __left; if (!hasError) { left = sqlPrimitiveExpression(); } if (!hasError) { +__left.reset(left); + } + if (!hasError) { while (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case ASTERISK: @@ -6921,7 +6965,7 @@ if(exp == nullptr){ exp = new SqlMultiplicativeExpression(); exp->addOperand(left); exp->setPosition(left); - left = exp; + left = exp; __left.reset(left); } exp->addOpe(SqlMultiplicativeExpression::MUL); exp->setPosition(t); @@ -6937,7 +6981,7 @@ if(exp == nullptr){ exp = new SqlMultiplicativeExpression(); exp->addOperand(left); exp->setPosition(left); - left = exp; + left = exp; __left.reset(left); } exp->addOpe(SqlMultiplicativeExpression::DIV); exp->setPosition(t); @@ -6953,7 +6997,7 @@ if(exp == nullptr){ exp = new SqlMultiplicativeExpression(); exp->addOperand(left); exp->setPosition(left); - left = exp; + left = exp; __left.reset(left); } exp->addOpe(SqlMultiplicativeExpression::MOD); exp->setPosition(t); @@ -6979,8 +7023,7 @@ exp->addOperand(right); if (!hasError) { } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -7102,7 +7145,7 @@ assert(false); } -SQLNullLiteral * AlinousLang::sqlNullLiteral() {SQLNullLiteral* exp = new SQLNullLiteral(); +SQLNullLiteral * AlinousLang::sqlNullLiteral() {SQLNullLiteral* exp = new SQLNullLiteral(); __STP(exp); Token* t = nullptr; if (!hasError) { t = jj_consume_token(_NULL); @@ -7110,13 +7153,12 @@ SQLNullLiteral * AlinousLang::sqlNullLiteral() {SQLNullLiteral* exp if (!hasError) { exp->setPosition(t); } -__ONERROR(exp); - return exp; +return __STP_MV(exp); assert(false); } -SQLWildCard * AlinousLang::sqlWildCard() {SQLWildCard* exp = new SQLWildCard(); +SQLWildCard * AlinousLang::sqlWildCard() {SQLWildCard* exp = new SQLWildCard(); __STP(exp); Token* t = nullptr; if (!hasError) { t = jj_consume_token(ASTERISK); @@ -7124,13 +7166,12 @@ SQLWildCard * AlinousLang::sqlWildCard() {SQLWildCard* exp = new SQLWi if (!hasError) { exp->setPosition(t); } -__ONERROR(exp); - return exp; +return __STP_MV(exp); assert(false); } -SQLFunctionCall * AlinousLang::sqlFunctionCall() {SQLFunctionCall* exp = new SQLFunctionCall(); +SQLFunctionCall * AlinousLang::sqlFunctionCall() {SQLFunctionCall* exp = new SQLFunctionCall(); __STP(exp); Token* t = nullptr; VariableIdentifier* name = nullptr; if (!hasError) { @@ -7155,8 +7196,7 @@ exp->setPosition(t); if (!hasError) { exp->setPosition(t); } -__ONERROR(exp); - return exp; +return __STP_MV(exp); assert(false); } @@ -7266,7 +7306,11 @@ exp->addArgument(ex); AbstractSQLExpression * AlinousLang::sqlDistinctArgument() {SQLDistinctArgument* dist = nullptr; + StackRelease __dist; + AbstractSQLExpression* ex = nullptr; + StackRelease __ex; + Token* t = nullptr; if (!hasError) { if (jj_2_23(2)) { @@ -7274,7 +7318,7 @@ AbstractSQLExpression * AlinousLang::sqlDistinctArgument() { t = jj_consume_token(DISTINCT); } if (!hasError) { -dist = new SQLDistinctArgument(); +dist = new SQLDistinctArgument(); __dist.reset(dist); dist->setPosition(t); } } else { @@ -7288,15 +7332,18 @@ dist = new SQLDistinctArgument(); if(t != nullptr){ dist->setPosition(ex); dist->setExpression(ex); - ex = dist; + ex = __dist.move(); __ex.reset(ex); + } + else{ + __ex.reset(ex); } } -return ex; +return __ex.move(); assert(false); } -SQLPlaceHolder * AlinousLang::sqlPlaceHolder() {SQLPlaceHolder* exp = new SQLPlaceHolder(); +SQLPlaceHolder * AlinousLang::sqlPlaceHolder() {SQLPlaceHolder* exp = new SQLPlaceHolder(); __STP(exp); Token* t = nullptr; AbstractExpression* ex = nullptr; if (!hasError) { @@ -7345,13 +7392,12 @@ exp->setAvailable(ex); if (!hasError) { exp->setPosition(t); } -__ONERROR(exp); - return exp; +return __STP_MV(exp); assert(false); } -SQLParenthesisExpression * AlinousLang::sqlParenthesisExpression() {SQLParenthesisExpression* exp = new SQLParenthesisExpression(); +SQLParenthesisExpression * AlinousLang::sqlParenthesisExpression() {SQLParenthesisExpression* exp = new SQLParenthesisExpression(); __STP(exp); Token* t = nullptr; AbstractSQLExpression* ex = nullptr; if (!hasError) { @@ -7373,13 +7419,12 @@ exp->setExpression(ex); if (!hasError) { exp->setPosition(t); } -__ONERROR(exp); - return exp; +return __STP_MV(exp); assert(false); } -SQLLiteral * AlinousLang::sqlLiteral() {SQLLiteral* exp = new SQLLiteral(); +SQLLiteral * AlinousLang::sqlLiteral() {SQLLiteral* exp = new SQLLiteral(); __STP(exp); Token* t = nullptr; if (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { @@ -7422,13 +7467,12 @@ exp->setValue(_STR(t), SQLLiteral::TYPE_STRING); if (!hasError) { } -__ONERROR(exp); - return exp; +return __STP_MV(exp); assert(false); } -SQLBooleanLiteral * AlinousLang::sqlBooleanLiteral() {SQLBooleanLiteral* exp = new SQLBooleanLiteral(); +SQLBooleanLiteral * AlinousLang::sqlBooleanLiteral() {SQLBooleanLiteral* exp = new SQLBooleanLiteral(); __STP(exp); Token* t = nullptr; if (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { @@ -7461,13 +7505,12 @@ exp->setValue(false); if (!hasError) { } -__ONERROR(exp); - return exp; +return __STP_MV(exp); assert(false); } -SQLColumnIdentifier * AlinousLang::sqlColumnIdentifier() {SQLColumnIdentifier* exp = new SQLColumnIdentifier(); +SQLColumnIdentifier * AlinousLang::sqlColumnIdentifier() {SQLColumnIdentifier* exp = new SQLColumnIdentifier(); __STP(exp); Token* t = nullptr; Token* t1 = nullptr; Token* t2 = nullptr; @@ -7536,8 +7579,7 @@ if(t3 != nullptr){ exp->setColumnName(_STR(t1)); } } -__ONERROR(exp); - return exp; +return __STP_MV(exp); assert(false); } @@ -7833,7 +7875,7 @@ assert(false); SQLExpressionList - * AlinousLang::sqlExpressionList() {SQLExpressionList* exp = new SQLExpressionList(); + * AlinousLang::sqlExpressionList() {SQLExpressionList* exp = new SQLExpressionList(); __STP(exp); Token* t = nullptr; AbstractSQLExpression* ex = nullptr; if (!hasError) { @@ -7873,8 +7915,7 @@ exp->addExpression(ex); if (!hasError) { } -__ONERROR(exp); - return exp; +return __STP_MV(exp); assert(false); } @@ -7884,10 +7925,15 @@ AbstractJoinPart TableList* tablelist = nullptr; Token* t = nullptr; TableIdentifier* table = nullptr; + + StackRelease __left; if (!hasError) { left = join(); } if (!hasError) { +__left.reset(left); + } + if (!hasError) { while (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case COMMA:{ @@ -7907,7 +7953,7 @@ if(tablelist == nullptr){ tablelist->addTable(left); tablelist->setPosition(left); - left = tablelist; + left = tablelist; __left.reset(left); } tablelist->setPosition(t); @@ -7925,8 +7971,7 @@ tablelist->addTable(table); if (!hasError) { } -__ONERROR(left); - return left; +return __left.move(); assert(false); } @@ -7934,10 +7979,15 @@ assert(false); AbstractJoinPart * AlinousLang::join() {AbstractJoinPart* left = nullptr; SQLJoinPart* right = nullptr; SQLJoin* joinBody = nullptr; + + StackRelease __left; if (!hasError) { left = joinTarget(); } if (!hasError) { +__left.reset(left); + } + if (!hasError) { while (!hasError) { switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) { case LEFT: @@ -7989,7 +8039,7 @@ if(joinBody == nullptr){ joinBody->setPosition(left); joinBody->setFirst(left); - left = joinBody; + left = joinBody; __left.reset(left); } joinBody->addJoinPart(right); @@ -7997,13 +8047,12 @@ if(joinBody == nullptr){ } end_label_43: ; } -__ONERROR(left); - return left; +return __left.move(); assert(false); } -SQLJoinPart * AlinousLang::innerJoin() {SQLJoinPart* join = new SQLJoinPart(); +SQLJoinPart * AlinousLang::innerJoin() {SQLJoinPart* join = new SQLJoinPart(); __STP(join); join->setJoinType(SQLJoinPart::INNER_JOIN); Token* t = nullptr; AbstractSQLExpression* exp = nullptr; @@ -8053,13 +8102,12 @@ join->setExpression(exp); if (!hasError) { } -__ONERROR(join); - return join; +return __STP_MV(join); assert(false); } -SQLJoinPart * AlinousLang::leftJoin() {SQLJoinPart* join = new SQLJoinPart(); +SQLJoinPart * AlinousLang::leftJoin() {SQLJoinPart* join = new SQLJoinPart(); __STP(join); join->setJoinType(SQLJoinPart::LEFT_OUTER_JOIN); Token* t = nullptr; AbstractSQLExpression* exp = nullptr; @@ -8125,13 +8173,12 @@ join->setExpression(exp); if (!hasError) { } -__ONERROR(join); - return join; +return __STP_MV(join); assert(false); } -SQLJoinPart * AlinousLang::rightJoin() {SQLJoinPart* join = new SQLJoinPart(); +SQLJoinPart * AlinousLang::rightJoin() {SQLJoinPart* join = new SQLJoinPart(); __STP(join); join->setJoinType(SQLJoinPart::RIGHT_OUTER_JOIN); Token* t = nullptr; AbstractSQLExpression* exp = nullptr; @@ -8197,13 +8244,12 @@ join->setExpression(exp); if (!hasError) { } -__ONERROR(join); - return join; +return __STP_MV(join); assert(false); } -SQLJoinPart * AlinousLang::crossJoin() {SQLJoinPart* join = new SQLJoinPart(); +SQLJoinPart * AlinousLang::crossJoin() {SQLJoinPart* join = new SQLJoinPart(); __STP(join); join->setJoinType(SQLJoinPart::CROSS_JOIN); Token* t = nullptr; AbstractSQLExpression* exp = nullptr; @@ -8253,8 +8299,7 @@ join->setExpression(exp); if (!hasError) { } -__ONERROR(join); - return join; +return __STP_MV(join); assert(false); } @@ -8333,7 +8378,7 @@ assert(false); } -ParenthesisJoinPart * AlinousLang::parenthesisJoinPart() {ParenthesisJoinPart* part = new ParenthesisJoinPart(); +ParenthesisJoinPart * AlinousLang::parenthesisJoinPart() {ParenthesisJoinPart* part = new ParenthesisJoinPart(); __STP(part); Token* t = nullptr; AbstractJoinPart* target = nullptr; if (!hasError) { @@ -8355,13 +8400,12 @@ part->setPart(target); if (!hasError) { part->setPosition(t); } -__ONERROR(part); - return part; +return __STP_MV(part); assert(false); } -TableIdentifier * AlinousLang::tableIdentifier() {TableIdentifier* exp = new TableIdentifier(); +TableIdentifier * AlinousLang::tableIdentifier() {TableIdentifier* exp = new TableIdentifier(); __STP(exp); Token* t = nullptr; Token* t1 = nullptr; Token* t2 = nullptr; @@ -8425,8 +8469,7 @@ exp->setPosition(t); ; } } -__ONERROR(exp); - return exp; +return __STP_MV(exp); assert(false); } @@ -8461,13 +8504,12 @@ AbstractJsonExpression errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true; } } -__ONERROR(jsonExp); - return jsonExp; +return jsonExp; assert(false); } -JsonInitializerExpression * AlinousLang::jsonInitializerExpression() {JsonInitializerExpression* jsonExp = new JsonInitializerExpression(); +JsonInitializerExpression * AlinousLang::jsonInitializerExpression() {JsonInitializerExpression* jsonExp = new JsonInitializerExpression(); __STP(jsonExp); Token* t = nullptr; JsonKeyValuePairExpression* element = nullptr; if (!hasError) { @@ -8528,13 +8570,12 @@ jsonExp->setPosition(element); if (!hasError) { jsonExp->setPosition(t); } -__ONERROR(jsonExp); - return jsonExp; +return __STP_MV(jsonExp); assert(false); } -JsonArrayExpression * AlinousLang::jsonArrayExpression() {JsonArrayExpression* jsonExp = new JsonArrayExpression(); +JsonArrayExpression * AlinousLang::jsonArrayExpression() {JsonArrayExpression* jsonExp = new JsonArrayExpression(); __STP(jsonExp); AbstractJsonExpression* element = nullptr; Token* t = nullptr; @@ -8652,13 +8693,12 @@ jsonExp->setPosition(exp); if (!hasError) { jsonExp->setPosition(t); } -__ONERROR(jsonExp); - return jsonExp; +return __STP_MV(jsonExp); assert(false); } -JsonKeyValuePairExpression * AlinousLang::jsonKeyValuePair() {JsonKeyValuePairExpression* pair = new JsonKeyValuePairExpression(); +JsonKeyValuePairExpression * AlinousLang::jsonKeyValuePair() {JsonKeyValuePairExpression* pair = new JsonKeyValuePairExpression(); __STP(pair); Token* t = nullptr; AbstractExpression* exp = nullptr; LiteralExpression* lit = nullptr; @@ -8730,8 +8770,7 @@ pair->setPosition(jsonExp); } } } -__ONERROR(pair); - return pair; +return __STP_MV(pair); assert(false); } diff --git a/src_gen/alinous_lang/AlinousLang.h b/src_gen/alinous_lang/AlinousLang.h index 9e8908f..f3f6fa7 100644 --- a/src_gen/alinous_lang/AlinousLang.h +++ b/src_gen/alinous_lang/AlinousLang.h @@ -379,60 +379,97 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); { jj_save(23, xla); } } - inline bool jj_3R_174() + inline bool jj_3R_158() { if (jj_done) return true; - if (jj_scan_token(BIT_AND)) return true; - if (jj_3R_172()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_163()) { + jj_scanpos = xsp; + if (jj_3R_164()) return true; + } return false; } - inline bool jj_3R_84() + inline bool jj_3R_262() { if (jj_done) return true; - if (jj_3R_48()) return true; + if (jj_3R_59()) return true; return false; } - inline bool jj_3R_226() + inline bool jj_3R_176() { if (jj_done) return true; - if (jj_scan_token(FALSE)) return true; + if (jj_scan_token(FROM)) return true; return false; } - inline bool jj_3R_178() + inline bool jj_3R_64() { if (jj_done) return true; - if (jj_3R_184()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_81()) { + jj_scanpos = xsp; + if (jj_3R_82()) { + jj_scanpos = xsp; + if (jj_3R_83()) return true; + } + } return false; } - inline bool jj_3R_113() + inline bool jj_3R_53() { if (jj_done) return true; - if (jj_scan_token(VAR)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3_6()) { + jj_scanpos = xsp; + if (jj_3_7()) { + jj_scanpos = xsp; + if (jj_3R_71()) { + jj_scanpos = xsp; + if (jj_3R_72()) { + jj_scanpos = xsp; + if (jj_3R_73()) { + jj_scanpos = xsp; + if (jj_3R_74()) { + jj_scanpos = xsp; + if (jj_3R_75()) return true; + } + } + } + } + } + } return false; } - inline bool jj_3R_176() + inline bool jj_3_8() { if (jj_done) return true; - if (jj_scan_token(FROM)) return true; + if (jj_3R_51()) return true; return false; } - inline bool jj_3R_225() + inline bool jj_3R_135() { if (jj_done) return true; - if (jj_scan_token(TRUE)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_158()) jj_scanpos = xsp; + if (jj_3R_159()) return true; return false; } - inline bool jj_3R_164() + inline bool jj_3R_260() { if (jj_done) return true; - if (jj_scan_token(PLUSPLUS)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_262()) jj_scanpos = xsp; return false; } @@ -448,124 +485,145 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_177() + inline bool jj_3R_58() { if (jj_done) return true; - if (jj_3R_183()) return true; + if (jj_scan_token(PLUSPLUS)) return true; return false; } - inline bool jj_3R_163() + inline bool jj_3R_47() { if (jj_done) return true; - if (jj_scan_token(MINUSMINUS)) return true; + if (jj_scan_token(STATIC)) return true; return false; } - inline bool jj_3R_215() + inline bool jj_3_2() { if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_225()) { - jj_scanpos = xsp; - if (jj_3R_226()) return true; - } + if (jj_3R_46()) return true; return false; } - inline bool jj_3R_112() + inline bool jj_3R_113() { if (jj_done) return true; - if (jj_scan_token(VOID)) return true; + if (jj_scan_token(VAR)) return true; return false; } - inline bool jj_3R_47() + inline bool jj_3R_214() { if (jj_done) return true; - if (jj_scan_token(STATIC)) return true; + if (jj_scan_token(L_PARENTHESIS)) return true; return false; } - inline bool jj_3_2() + inline bool jj_3R_57() { if (jj_done) return true; - if (jj_3R_46()) return true; + if (jj_scan_token(MINUSMINUS)) return true; return false; } - inline bool jj_3R_232() + inline bool jj_3R_257() { if (jj_done) return true; if (jj_scan_token(L_PARENTHESIS)) return true; - if (jj_3R_59()) return true; + if (jj_3R_260()) return true; if (jj_scan_token(R_PARENTHESIS)) return true; return false; } - inline bool jj_3R_158() + inline bool jj_3R_168() { if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_163()) { - jj_scanpos = xsp; - if (jj_3R_164()) return true; - } + if (jj_3R_173()) return true; return false; } - inline bool jj_3R_83() + inline bool jj_3R_169() { if (jj_done) return true; - if (jj_scan_token(CHARACTER_LITERAL)) return true; + if (jj_scan_token(191)) return true; + if (jj_3R_167()) return true; return false; } - inline bool jj_3R_169() + inline bool jj_3R_112() { if (jj_done) return true; - if (jj_scan_token(191)) return true; - if (jj_3R_167()) return true; + if (jj_scan_token(VOID)) return true; return false; } - inline bool jj_3R_82() + inline bool jj_3_12() { if (jj_done) return true; - if (jj_scan_token(SQL_STRING_LITERAL)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_57()) { + jj_scanpos = xsp; + if (jj_3R_58()) return true; + } return false; } - inline bool jj_3R_111() + inline bool jj_3R_160() { if (jj_done) return true; - if (jj_scan_token(STRING)) return true; + if (jj_3R_167()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_169()) { jj_scanpos = xsp; break; } + } return false; } - inline bool jj_3R_135() + inline bool jj_3_3() { if (jj_done) return true; Token * xsp; xsp = jj_scanpos; - if (jj_3R_158()) jj_scanpos = xsp; - if (jj_3R_159()) return true; + if (jj_3R_47()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3_2()) jj_scanpos = xsp; + if (jj_3R_48()) return true; return false; } - inline bool jj_3R_81() + inline bool jj_3R_101() { if (jj_done) return true; - if (jj_scan_token(INTEGER_LITERAL)) return true; + if (jj_3R_135()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3_12()) jj_scanpos = xsp; return false; } - inline bool jj_3R_262() + inline bool jj_3R_157() { if (jj_done) return true; - if (jj_3R_59()) return true; + if (jj_scan_token(SELECT)) return true; + if (jj_3R_178()) return true; + return false; + } + + inline bool jj_3R_111() + { + if (jj_done) return true; + if (jj_scan_token(STRING)) return true; + return false; + } + + inline bool jj_3R_154() + { + if (jj_done) return true; + if (jj_scan_token(DELETE)) return true; + if (jj_3R_176()) return true; return false; } @@ -577,102 +635,92 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_160() + inline bool jj_3_16() + { + if (jj_done) return true; + if (jj_scan_token(L_BRACKET)) return true; + if (jj_3R_59()) return true; + return false; + } + + inline bool jj_3R_258() { if (jj_done) return true; - if (jj_3R_167()) return true; Token * xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_169()) { jj_scanpos = xsp; break; } + if (jj_3_16()) { jj_scanpos = xsp; break; } } return false; } - inline bool jj_3R_58() + inline bool jj_3R_134() { if (jj_done) return true; - if (jj_scan_token(PLUSPLUS)) return true; + if (jj_3R_157()) return true; return false; } - inline bool jj_3R_64() + inline bool jj_3R_133() { if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_81()) { - jj_scanpos = xsp; - if (jj_3R_82()) { - jj_scanpos = xsp; - if (jj_3R_83()) return true; - } - } + if (jj_3R_156()) return true; return false; } - inline bool jj_3_3() + inline bool jj_3R_217() { if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_47()) jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_3_2()) jj_scanpos = xsp; - if (jj_3R_48()) return true; + if (jj_scan_token(DOLLAR)) return true; return false; } - inline bool jj_3R_110() + inline bool jj_3R_132() { if (jj_done) return true; - if (jj_scan_token(LONG)) return true; + if (jj_3R_155()) return true; return false; } - inline bool jj_3R_260() + inline bool jj_3R_131() { if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_262()) jj_scanpos = xsp; + if (jj_3R_154()) return true; return false; } - inline bool jj_3R_57() + inline bool jj_3R_110() { if (jj_done) return true; - if (jj_scan_token(MINUSMINUS)) return true; + if (jj_scan_token(LONG)) return true; return false; } - inline bool jj_3R_154() + inline bool jj_3R_130() { if (jj_done) return true; - if (jj_scan_token(DELETE)) return true; - if (jj_3R_176()) return true; + if (jj_3R_153()) return true; return false; } - inline bool jj_3R_168() + inline bool jj_3R_129() { if (jj_done) return true; - if (jj_3R_173()) return true; + if (jj_3R_152()) return true; return false; } - inline bool jj_3R_109() + inline bool jj_3R_128() { if (jj_done) return true; - if (jj_scan_token(INT)) return true; + if (jj_3R_151()) return true; return false; } - inline bool jj_3R_157() + inline bool jj_3R_100() { if (jj_done) return true; - if (jj_scan_token(SELECT)) return true; - if (jj_3R_178()) return true; + if (jj_scan_token(MINUS)) return true; return false; } @@ -684,63 +732,76 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_139() + inline bool jj_3R_161() { if (jj_done) return true; - if (jj_scan_token(THROW)) return true; - if (jj_3R_59()) return true; + if (jj_3R_168()) return true; return false; } - inline bool jj_3R_257() + inline bool jj_3R_252() { if (jj_done) return true; - if (jj_scan_token(L_PARENTHESIS)) return true; - if (jj_3R_260()) return true; - if (jj_scan_token(R_PARENTHESIS)) return true; + if (jj_3R_258()) return true; return false; } - inline bool jj_3R_214() + inline bool jj_3R_99() { if (jj_done) return true; - if (jj_scan_token(L_PARENTHESIS)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_128()) { + jj_scanpos = xsp; + if (jj_3R_129()) { + jj_scanpos = xsp; + if (jj_3R_130()) { + jj_scanpos = xsp; + if (jj_3R_131()) { + jj_scanpos = xsp; + if (jj_3R_132()) { + jj_scanpos = xsp; + if (jj_3R_133()) { + jj_scanpos = xsp; + if (jj_3R_134()) return true; + } + } + } + } + } + } return false; } - inline bool jj_3_12() + inline bool jj_3R_109() { if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_57()) { - jj_scanpos = xsp; - if (jj_3R_58()) return true; - } + if (jj_scan_token(INT)) return true; return false; } - inline bool jj_3R_101() + inline bool jj_3R_139() { if (jj_done) return true; - if (jj_3R_135()) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3_12()) jj_scanpos = xsp; + if (jj_scan_token(THROW)) return true; + if (jj_3R_59()) return true; return false; } - inline bool jj_3R_134() + inline bool jj_3R_76() { if (jj_done) return true; - if (jj_3R_157()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_100()) jj_scanpos = xsp; + if (jj_3R_101()) return true; return false; } - inline bool jj_3R_108() + inline bool jj_3R_251() { if (jj_done) return true; - if (jj_scan_token(SHORT)) return true; + if (jj_3R_257()) return true; return false; } @@ -756,130 +817,117 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_133() + inline bool jj_3_23() { if (jj_done) return true; - if (jj_3R_156()) return true; + if (jj_scan_token(DISTINCT)) return true; return false; } - inline bool jj_3R_132() + inline bool jj_3R_108() { if (jj_done) return true; - if (jj_3R_155()) return true; + if (jj_scan_token(SHORT)) return true; return false; } - inline bool jj_3R_131() + inline bool jj_3R_229() { if (jj_done) return true; - if (jj_3R_154()) return true; + if (jj_scan_token(MODULO)) return true; return false; } - inline bool jj_3R_130() + inline bool jj_3R_233() { if (jj_done) return true; - if (jj_3R_153()) return true; + if (jj_scan_token(NEW)) return true; + if (jj_3R_67()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_251()) { + jj_scanpos = xsp; + if (jj_3R_252()) return true; + } return false; } - inline bool jj_3R_129() + inline bool jj_3R_107() { if (jj_done) return true; - if (jj_3R_152()) return true; + if (jj_scan_token(CHAR)) return true; return false; } - inline bool jj_3R_128() + inline bool jj_3R_149() { if (jj_done) return true; - if (jj_3R_151()) return true; + if (jj_scan_token(DROP)) return true; + if (jj_scan_token(TABLE)) return true; return false; } - inline bool jj_3R_107() + inline bool jj_3R_228() { if (jj_done) return true; - if (jj_scan_token(CHAR)) return true; + if (jj_scan_token(DIV)) return true; return false; } - inline bool jj_3R_99() + inline bool jj_3R_138() { if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_128()) { - jj_scanpos = xsp; - if (jj_3R_129()) { - jj_scanpos = xsp; - if (jj_3R_130()) { - jj_scanpos = xsp; - if (jj_3R_131()) { - jj_scanpos = xsp; - if (jj_3R_132()) { - jj_scanpos = xsp; - if (jj_3R_133()) { - jj_scanpos = xsp; - if (jj_3R_134()) return true; - } - } - } - } - } - } + if (jj_scan_token(LOGICAL_AND)) return true; + if (jj_3R_136()) return true; return false; } - inline bool jj_3R_100() + inline bool jj_3R_224() { if (jj_done) return true; - if (jj_scan_token(MINUS)) return true; + if (jj_3R_84()) return true; return false; } - inline bool jj_3R_161() + inline bool jj_3R_223() { if (jj_done) return true; - if (jj_3R_168()) return true; + if (jj_3R_234()) return true; return false; } - inline bool jj_3R_138() + inline bool jj_3R_222() { if (jj_done) return true; - if (jj_scan_token(LOGICAL_AND)) return true; - if (jj_3R_136()) return true; + if (jj_3R_233()) return true; return false; } - inline bool jj_3_16() + inline bool jj_3R_221() { if (jj_done) return true; - if (jj_scan_token(L_BRACKET)) return true; - if (jj_3R_59()) return true; + if (jj_3R_232()) return true; return false; } - inline bool jj_3R_258() + inline bool jj_3R_220() { if (jj_done) return true; - Token * xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3_16()) { jj_scanpos = xsp; break; } - } + if (jj_3R_231()) return true; return false; } - inline bool jj_3R_76() + inline bool jj_3R_219() { if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_100()) jj_scanpos = xsp; - if (jj_3R_101()) return true; + if (jj_3R_230()) return true; + return false; + } + + inline bool jj_3R_227() + { + if (jj_done) return true; + if (jj_scan_token(ASTERISK)) return true; return false; } @@ -890,10 +938,10 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_217() + inline bool jj_3R_137() { if (jj_done) return true; - if (jj_scan_token(DOLLAR)) return true; + if (jj_3R_161()) return true; return false; } @@ -909,17 +957,57 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_229() + inline bool jj_3R_253() { if (jj_done) return true; - if (jj_scan_token(MODULO)) return true; + if (jj_scan_token(COMMA)) return true; return false; } - inline bool jj_3R_252() + inline bool jj_3R_211() { if (jj_done) return true; - if (jj_3R_258()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_219()) { + jj_scanpos = xsp; + if (jj_3R_220()) { + jj_scanpos = xsp; + if (jj_3R_221()) { + jj_scanpos = xsp; + if (jj_3R_222()) { + jj_scanpos = xsp; + if (jj_3R_223()) { + jj_scanpos = xsp; + if (jj_3R_224()) return true; + } + } + } + } + } + return false; + } + + inline bool jj_3R_218() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_227()) { + jj_scanpos = xsp; + if (jj_3R_228()) { + jj_scanpos = xsp; + if (jj_3R_229()) return true; + } + } + if (jj_3R_76()) return true; + return false; + } + + inline bool jj_3R_65() + { + if (jj_done) return true; + if (jj_scan_token(SQL_NOT)) return true; return false; } @@ -930,32 +1018,43 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_149() + inline bool jj_3R_155() { if (jj_done) return true; - if (jj_scan_token(DROP)) return true; - if (jj_scan_token(TABLE)) return true; + if (jj_scan_token(INSERT)) return true; + if (jj_scan_token(INTO)) return true; return false; } - inline bool jj_3R_251() + inline bool jj_3R_56() { if (jj_done) return true; - if (jj_3R_257()) return true; + if (jj_3R_76()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_218()) { jj_scanpos = xsp; break; } + } return false; } - inline bool jj_3R_228() + inline bool jj_3R_78() { if (jj_done) return true; - if (jj_scan_token(DIV)) return true; + if (jj_3R_59()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_253()) { jj_scanpos = xsp; break; } + } return false; } - inline bool jj_3_23() + inline bool jj_3R_66() { if (jj_done) return true; - if (jj_scan_token(DISTINCT)) return true; + if (jj_3R_84()) return true; + if (jj_scan_token(L_PARENTHESIS)) return true; return false; } @@ -967,46 +1066,44 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_137() + inline bool jj_3R_60() { if (jj_done) return true; - if (jj_3R_161()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_78()) jj_scanpos = xsp; return false; } - inline bool jj_3R_227() + inline bool jj_3_21() { if (jj_done) return true; - if (jj_scan_token(ASTERISK)) return true; + if (jj_scan_token(IS)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_65()) jj_scanpos = xsp; + if (jj_scan_token(_NULL)) return true; return false; } - inline bool jj_3R_155() + inline bool jj_3R_55() { if (jj_done) return true; - if (jj_scan_token(INSERT)) return true; - if (jj_scan_token(INTO)) return true; + if (jj_scan_token(MINUS)) return true; return false; } - inline bool jj_3R_233() + inline bool jj_3R_103() { if (jj_done) return true; - if (jj_scan_token(NEW)) return true; - if (jj_3R_67()) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_251()) { - jj_scanpos = xsp; - if (jj_3R_252()) return true; - } + if (jj_3R_137()) return true; return false; } - inline bool jj_3R_65() + inline bool jj_3R_213() { if (jj_done) return true; - if (jj_scan_token(SQL_NOT)) return true; + if (jj_scan_token(ASTERISK)) return true; return false; } @@ -1022,215 +1119,185 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_218() + inline bool jj_3R_140() { if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_227()) { - jj_scanpos = xsp; - if (jj_3R_228()) { - jj_scanpos = xsp; - if (jj_3R_229()) return true; - } - } - if (jj_3R_76()) return true; + if (jj_scan_token(TRY)) return true; + if (jj_3R_49()) return true; return false; } - inline bool jj_3R_224() + inline bool jj_3_5() { if (jj_done) return true; - if (jj_3R_84()) return true; + if (jj_scan_token(LT)) return true; + if (jj_3R_46()) return true; return false; } - inline bool jj_3R_223() + inline bool jj_3R_54() { if (jj_done) return true; - if (jj_3R_234()) return true; + if (jj_scan_token(PLUS)) return true; return false; } - inline bool jj_3R_222() + inline bool jj_3R_212() { if (jj_done) return true; - if (jj_3R_233()) return true; + if (jj_scan_token(_NULL)) return true; return false; } - inline bool jj_3R_221() + inline bool jj_3R_124() { if (jj_done) return true; - if (jj_3R_232()) return true; + if (jj_3R_147()) return true; return false; } - inline bool jj_3_5() + inline bool jj_3R_123() { if (jj_done) return true; - if (jj_scan_token(LT)) return true; - if (jj_3R_46()) return true; + if (jj_3R_146()) return true; return false; } - inline bool jj_3R_220() + inline bool jj_3R_122() { if (jj_done) return true; - if (jj_3R_231()) return true; + if (jj_3R_145()) return true; return false; } - inline bool jj_3R_219() + inline bool jj_3_15() { if (jj_done) return true; - if (jj_3R_230()) return true; + if (jj_scan_token(L_PARENTHESIS)) return true; + if (jj_3R_60()) return true; + if (jj_scan_token(R_PARENTHESIS)) return true; return false; } - inline bool jj_3R_140() + inline bool jj_3R_121() { if (jj_done) return true; - if (jj_scan_token(TRY)) return true; - if (jj_3R_49()) return true; + if (jj_3R_144()) return true; return false; } - inline bool jj_3R_56() + inline bool jj_3R_208() { if (jj_done) return true; - if (jj_3R_76()) return true; - Token * xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_218()) { jj_scanpos = xsp; break; } - } + if (jj_3R_217()) return true; return false; } - inline bool jj_3R_59() + inline bool jj_3R_120() { if (jj_done) return true; - if (jj_3R_77()) return true; + if (jj_3R_143()) return true; return false; } - inline bool jj_3R_253() + inline bool jj_3R_207() { if (jj_done) return true; - if (jj_scan_token(COMMA)) return true; + if (jj_3R_216()) return true; return false; } - inline bool jj_3R_211() + inline bool jj_3R_119() { if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_219()) { - jj_scanpos = xsp; - if (jj_3R_220()) { - jj_scanpos = xsp; - if (jj_3R_221()) { - jj_scanpos = xsp; - if (jj_3R_222()) { - jj_scanpos = xsp; - if (jj_3R_223()) { - jj_scanpos = xsp; - if (jj_3R_224()) return true; - } - } - } - } - } + if (jj_3R_142()) return true; return false; } - inline bool jj_3R_124() + inline bool jj_3R_118() { if (jj_done) return true; - if (jj_3R_147()) return true; + if (jj_3R_141()) return true; return false; } - inline bool jj_3R_123() + inline bool jj_3R_61() { if (jj_done) return true; - if (jj_3R_146()) return true; + if (jj_scan_token(IDENTIFIER)) return true; return false; } - inline bool jj_3R_122() + inline bool jj_3_22() { if (jj_done) return true; - if (jj_3R_145()) return true; + if (jj_3R_66()) return true; return false; } - inline bool jj_3R_121() + inline bool jj_3R_206() { if (jj_done) return true; - if (jj_3R_144()) return true; + if (jj_3R_215()) return true; return false; } - inline bool jj_3_21() + inline bool jj_3R_117() { if (jj_done) return true; - if (jj_scan_token(IS)) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_65()) jj_scanpos = xsp; - if (jj_scan_token(_NULL)) return true; + if (jj_3R_140()) return true; return false; } - inline bool jj_3R_120() + inline bool jj_3R_205() { if (jj_done) return true; - if (jj_3R_143()) return true; + if (jj_3R_64()) return true; return false; } - inline bool jj_3R_119() + inline bool jj_3R_201() { if (jj_done) return true; - if (jj_3R_142()) return true; + if (jj_3R_211()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3_15()) jj_scanpos = xsp; return false; } - inline bool jj_3R_103() + inline bool jj_3R_116() { if (jj_done) return true; - if (jj_3R_137()) return true; + if (jj_3R_139()) return true; return false; } - inline bool jj_3R_118() + inline bool jj_3R_59() { if (jj_done) return true; - if (jj_3R_141()) return true; + if (jj_3R_77()) return true; return false; } - inline bool jj_3R_117() + inline bool jj_3R_204() { if (jj_done) return true; - if (jj_3R_140()) return true; + if (jj_3R_214()) return true; return false; } - inline bool jj_3R_116() + inline bool jj_3R_203() { if (jj_done) return true; - if (jj_3R_139()) return true; + if (jj_3R_213()) return true; return false; } - inline bool jj_3R_55() + inline bool jj_3R_202() { if (jj_done) return true; - if (jj_scan_token(MINUS)) return true; + if (jj_3R_212()) return true; return false; } @@ -1256,23 +1323,16 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_78() + inline bool jj_3_11() { if (jj_done) return true; - if (jj_3R_59()) return true; Token * xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_253()) { jj_scanpos = xsp; break; } + xsp = jj_scanpos; + if (jj_3R_54()) { + jj_scanpos = xsp; + if (jj_3R_55()) return true; } - return false; - } - - inline bool jj_3R_66() - { - if (jj_done) return true; - if (jj_3R_84()) return true; - if (jj_scan_token(L_PARENTHESIS)) return true; + if (jj_3R_56()) return true; return false; } @@ -1309,6 +1369,48 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } + inline bool jj_3R_193() + { + if (jj_done) return true; + if (jj_3R_56()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3_11()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3R_194() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_202()) { + jj_scanpos = xsp; + if (jj_3R_203()) { + jj_scanpos = xsp; + if (jj_3R_204()) { + jj_scanpos = xsp; + if (jj_3R_205()) { + jj_scanpos = xsp; + if (jj_3R_206()) { + jj_scanpos = xsp; + if (jj_3_22()) { + jj_scanpos = xsp; + if (jj_3R_207()) { + jj_scanpos = xsp; + if (jj_3R_208()) return true; + } + } + } + } + } + } + } + return false; + } + inline bool jj_3R_94() { if (jj_done) return true; @@ -1323,26 +1425,25 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_54() + inline bool jj_3R_259() { if (jj_done) return true; - if (jj_scan_token(PLUS)) return true; + if (jj_3R_261()) return true; return false; } - inline bool jj_3R_92() + inline bool jj_3_20() { if (jj_done) return true; - if (jj_3R_112()) return true; + if (jj_scan_token(LIKE)) return true; + if (jj_3R_64()) return true; return false; } - inline bool jj_3R_60() + inline bool jj_3R_92() { if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_78()) jj_scanpos = xsp; + if (jj_3R_112()) return true; return false; } @@ -1353,18 +1454,25 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_52() + inline bool jj_3R_90() { if (jj_done) return true; - if (jj_scan_token(ELSE)) return true; - if (jj_scan_token(IF)) return true; + if (jj_3R_110()) return true; return false; } - inline bool jj_3R_90() + inline bool jj_3R_150() { if (jj_done) return true; - if (jj_3R_110()) return true; + if (jj_scan_token(ALTER)) return true; + if (jj_scan_token(TABLE)) return true; + return false; + } + + inline bool jj_3R_80() + { + if (jj_done) return true; + if (jj_3R_103()) return true; return false; } @@ -1382,24 +1490,24 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_213() + inline bool jj_3R_87() { if (jj_done) return true; - if (jj_scan_token(ASTERISK)) return true; + if (jj_3R_107()) return true; return false; } - inline bool jj_3R_61() + inline bool jj_3R_210() { if (jj_done) return true; - if (jj_scan_token(IDENTIFIER)) return true; + if (jj_scan_token(RSIGNEDSHIFT)) return true; return false; } - inline bool jj_3R_87() + inline bool jj_3R_127() { if (jj_done) return true; - if (jj_3R_107()) return true; + if (jj_3R_150()) return true; return false; } @@ -1410,6 +1518,51 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } + inline bool jj_3R_126() + { + if (jj_done) return true; + if (jj_3R_149()) return true; + return false; + } + + inline bool jj_3_24() + { + if (jj_done) return true; + if (jj_3R_59()) return true; + return false; + } + + inline bool jj_3R_255() + { + if (jj_done) return true; + if (jj_scan_token(IDENTIFIER)) return true; + return false; + } + + inline bool jj_3R_52() + { + if (jj_done) return true; + if (jj_scan_token(ELSE)) return true; + if (jj_scan_token(IF)) return true; + return false; + } + + inline bool jj_3_14() + { + if (jj_done) return true; + if (jj_scan_token(L_BRACKET)) return true; + if (jj_3R_59()) return true; + if (jj_scan_token(R_BRACKET)) return true; + return false; + } + + inline bool jj_3R_125() + { + if (jj_done) return true; + if (jj_3R_148()) return true; + return false; + } + inline bool jj_3R_85() { if (jj_done) return true; @@ -1417,43 +1570,44 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3_11() + inline bool jj_3R_254() { if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_54()) { - jj_scanpos = xsp; - if (jj_3R_55()) return true; - } - if (jj_3R_56()) return true; + if (jj_3R_242()) return true; return false; } - inline bool jj_3R_193() + inline bool jj_3R_192() { if (jj_done) return true; - if (jj_3R_56()) return true; + if (jj_3R_201()) return true; Token * xsp; while (true) { xsp = jj_scanpos; - if (jj_3_11()) { jj_scanpos = xsp; break; } + if (jj_3_14()) { jj_scanpos = xsp; break; } } return false; } - inline bool jj_3_20() + inline bool jj_3R_98() { if (jj_done) return true; - if (jj_scan_token(LIKE)) return true; - if (jj_3R_64()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_125()) { + jj_scanpos = xsp; + if (jj_3R_126()) { + jj_scanpos = xsp; + if (jj_3R_127()) return true; + } + } return false; } - inline bool jj_3R_212() + inline bool jj_3R_209() { if (jj_done) return true; - if (jj_scan_token(_NULL)) return true; + if (jj_scan_token(192)) return true; return false; } @@ -1493,122 +1647,127 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3_10() - { - if (jj_done) return true; - if (jj_scan_token(ELSE)) return true; - if (jj_3R_53()) return true; - return false; - } - - inline bool jj_3R_80() - { - if (jj_done) return true; - if (jj_3R_103()) return true; - return false; - } - - inline bool jj_3R_208() + inline bool jj_3R_156() { if (jj_done) return true; - if (jj_3R_217()) return true; + if (jj_scan_token(UPDATE)) return true; + if (jj_3R_177()) return true; return false; } - inline bool jj_3_15() + inline bool jj_3R_250() { if (jj_done) return true; - if (jj_scan_token(L_PARENTHESIS)) return true; - if (jj_3R_60()) return true; - if (jj_scan_token(R_PARENTHESIS)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_254()) { + jj_scanpos = xsp; + if (jj_3R_255()) return true; + } + if (jj_scan_token(COLON)) return true; + xsp = jj_scanpos; + if (jj_3_24()) { + jj_scanpos = xsp; + if (jj_3R_259()) return true; + } return false; } - inline bool jj_3R_207() + inline bool jj_3R_79() { if (jj_done) return true; - if (jj_3R_216()) return true; + if (jj_scan_token(SQL_NOT)) return true; return false; } - inline bool jj_3_9() + inline bool jj_3R_69() { if (jj_done) return true; - if (jj_3R_52()) return true; + if (jj_3R_53()) return true; return false; } - inline bool jj_3_22() + inline bool jj_3R_68() { if (jj_done) return true; - if (jj_3R_66()) return true; + if (jj_scan_token(L_BRACKET)) return true; + if (jj_scan_token(R_BRACKET)) return true; return false; } - inline bool jj_3R_206() + inline bool jj_3R_195() { if (jj_done) return true; - if (jj_3R_215()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_209()) { + jj_scanpos = xsp; + if (jj_3R_210()) return true; + } + if (jj_3R_193()) return true; return false; } - inline bool jj_3R_201() + inline bool jj_3_10() { if (jj_done) return true; - if (jj_3R_211()) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3_15()) jj_scanpos = xsp; + if (jj_scan_token(ELSE)) return true; + if (jj_3R_53()) return true; return false; } - inline bool jj_3R_205() + inline bool jj_3_17() { if (jj_done) return true; - if (jj_3R_64()) return true; + if (jj_scan_token(COMMA)) return true; + if (jj_3R_61()) return true; return false; } - inline bool jj_3R_68() + inline bool jj_3R_246() { if (jj_done) return true; - if (jj_scan_token(L_BRACKET)) return true; - if (jj_scan_token(R_BRACKET)) return true; + if (jj_scan_token(SQL_STRING_LITERAL)) return true; return false; } - inline bool jj_3R_69() + inline bool jj_3R_63() { if (jj_done) return true; - if (jj_3R_53()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_79()) jj_scanpos = xsp; + if (jj_3R_80()) return true; return false; } - inline bool jj_3R_210() + inline bool jj_3R_256() { if (jj_done) return true; - if (jj_scan_token(RSIGNEDSHIFT)) return true; + if (jj_scan_token(COMMA)) return true; + if (jj_3R_59()) return true; return false; } - inline bool jj_3R_204() + inline bool jj_3R_247() { if (jj_done) return true; - if (jj_3R_214()) return true; + if (jj_scan_token(DOT)) return true; + if (jj_3R_192()) return true; return false; } - inline bool jj_3R_203() + inline bool jj_3R_245() { if (jj_done) return true; - if (jj_3R_213()) return true; + if (jj_scan_token(STRING_LITERAL)) return true; return false; } - inline bool jj_3R_202() + inline bool jj_3_9() { if (jj_done) return true; - if (jj_3R_212()) return true; + if (jj_3R_52()) return true; return false; } @@ -1624,87 +1783,75 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_156() + inline bool jj_3R_49() { if (jj_done) return true; - if (jj_scan_token(UPDATE)) return true; - if (jj_3R_177()) return true; + if (jj_scan_token(L_BRACE)) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_69()) { jj_scanpos = xsp; break; } + } + if (jj_scan_token(R_BRACE)) return true; return false; } - inline bool jj_3R_259() + inline bool jj_3R_186() { if (jj_done) return true; - if (jj_3R_261()) return true; + if (jj_3R_193()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_195()) { jj_scanpos = xsp; break; } + } return false; } - inline bool jj_3R_194() + inline bool jj_3R_242() { if (jj_done) return true; Token * xsp; xsp = jj_scanpos; - if (jj_3R_202()) { - jj_scanpos = xsp; - if (jj_3R_203()) { - jj_scanpos = xsp; - if (jj_3R_204()) { - jj_scanpos = xsp; - if (jj_3R_205()) { - jj_scanpos = xsp; - if (jj_3R_206()) { - jj_scanpos = xsp; - if (jj_3_22()) { - jj_scanpos = xsp; - if (jj_3R_207()) { + if (jj_3R_245()) { jj_scanpos = xsp; - if (jj_3R_208()) return true; - } - } - } - } - } - } + if (jj_3R_246()) return true; } return false; } - inline bool jj_3R_79() + inline bool jj_3R_187() { if (jj_done) return true; - if (jj_scan_token(SQL_NOT)) return true; + if (jj_3R_194()) return true; return false; } - inline bool jj_3R_209() + inline bool jj_3R_249() { if (jj_done) return true; - if (jj_scan_token(192)) return true; + if (jj_3R_59()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_256()) { jj_scanpos = xsp; break; } + } return false; } - inline bool jj_3R_49() + inline bool jj_3R_185() { if (jj_done) return true; - if (jj_scan_token(L_BRACE)) return true; + if (jj_3R_192()) return true; Token * xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_69()) { jj_scanpos = xsp; break; } + if (jj_3R_247()) { jj_scanpos = xsp; break; } } - if (jj_scan_token(R_BRACE)) return true; return false; } - inline bool jj_3R_150() - { - if (jj_done) return true; - if (jj_scan_token(ALTER)) return true; - if (jj_scan_token(TABLE)) return true; - return false; - } - - inline bool jj_3R_141() + inline bool jj_3R_141() { if (jj_done) return true; if (jj_scan_token(IF)) return true; @@ -1712,100 +1859,6 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_127() - { - if (jj_done) return true; - if (jj_3R_150()) return true; - return false; - } - - inline bool jj_3R_63() - { - if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_79()) jj_scanpos = xsp; - if (jj_3R_80()) return true; - return false; - } - - inline bool jj_3R_195() - { - if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_209()) { - jj_scanpos = xsp; - if (jj_3R_210()) return true; - } - if (jj_3R_193()) return true; - return false; - } - - inline bool jj_3R_126() - { - if (jj_done) return true; - if (jj_3R_149()) return true; - return false; - } - - inline bool jj_3R_125() - { - if (jj_done) return true; - if (jj_3R_148()) return true; - return false; - } - - inline bool jj_3_24() - { - if (jj_done) return true; - if (jj_3R_59()) return true; - return false; - } - - inline bool jj_3R_255() - { - if (jj_done) return true; - if (jj_scan_token(IDENTIFIER)) return true; - return false; - } - - inline bool jj_3_14() - { - if (jj_done) return true; - if (jj_scan_token(L_BRACKET)) return true; - if (jj_3R_59()) return true; - if (jj_scan_token(R_BRACKET)) return true; - return false; - } - - inline bool jj_3R_192() - { - if (jj_done) return true; - if (jj_3R_201()) return true; - Token * xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3_14()) { jj_scanpos = xsp; break; } - } - return false; - } - - inline bool jj_3_17() - { - if (jj_done) return true; - if (jj_scan_token(COMMA)) return true; - if (jj_3R_61()) return true; - return false; - } - - inline bool jj_3R_254() - { - if (jj_done) return true; - if (jj_3R_242()) return true; - return false; - } - inline bool jj_3R_97() { if (jj_done) return true; @@ -1813,63 +1866,10 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_186() - { - if (jj_done) return true; - if (jj_3R_193()) return true; - Token * xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_195()) { jj_scanpos = xsp; break; } - } - return false; - } - - inline bool jj_3R_98() - { - if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_125()) { - jj_scanpos = xsp; - if (jj_3R_126()) { - jj_scanpos = xsp; - if (jj_3R_127()) return true; - } - } - return false; - } - - inline bool jj_3R_142() - { - if (jj_done) return true; - if (jj_scan_token(BREAK)) return true; - if (jj_scan_token(SEMI_COLON)) return true; - return false; - } - - inline bool jj_3R_250() - { - if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_254()) { - jj_scanpos = xsp; - if (jj_3R_255()) return true; - } - if (jj_scan_token(COLON)) return true; - xsp = jj_scanpos; - if (jj_3_24()) { - jj_scanpos = xsp; - if (jj_3R_259()) return true; - } - return false; - } - - inline bool jj_3R_246() + inline bool jj_3R_244() { if (jj_done) return true; - if (jj_scan_token(SQL_STRING_LITERAL)) return true; + if (jj_scan_token(FALSE)) return true; return false; } @@ -1880,96 +1880,10 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_247() - { - if (jj_done) return true; - if (jj_scan_token(DOT)) return true; - if (jj_3R_192()) return true; - return false; - } - - inline bool jj_3R_245() - { - if (jj_done) return true; - if (jj_scan_token(STRING_LITERAL)) return true; - return false; - } - - inline bool jj_3_19() - { - if (jj_done) return true; - if (jj_scan_token(SQLAND)) return true; - if (jj_3R_63()) return true; - return false; - } - - inline bool jj_3R_256() - { - if (jj_done) return true; - if (jj_scan_token(COMMA)) return true; - if (jj_3R_59()) return true; - return false; - } - - inline bool jj_3R_70() - { - if (jj_done) return true; - if (jj_scan_token(EQUALS)) return true; - if (jj_3R_59()) return true; - return false; - } - - inline bool jj_3R_62() - { - if (jj_done) return true; - if (jj_3R_63()) return true; - return false; - } - - inline bool jj_3R_143() - { - if (jj_done) return true; - if (jj_scan_token(CONTINUE)) return true; - if (jj_scan_token(SEMI_COLON)) return true; - return false; - } - - inline bool jj_3R_198() - { - if (jj_done) return true; - if (jj_scan_token(LT)) return true; - return false; - } - - inline bool jj_3R_242() - { - if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_245()) { - jj_scanpos = xsp; - if (jj_3R_246()) return true; - } - return false; - } - - inline bool jj_3R_185() - { - if (jj_done) return true; - if (jj_3R_192()) return true; - Token * xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_247()) { jj_scanpos = xsp; break; } - } - return false; - } - - inline bool jj_3_1() + inline bool jj_3R_243() { if (jj_done) return true; - if (jj_scan_token(DOT)) return true; - if (jj_scan_token(IDENTIFIER)) return true; + if (jj_scan_token(TRUE)) return true; return false; } @@ -1981,70 +1895,6 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_51() - { - if (jj_done) return true; - if (jj_3R_59()) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_70()) jj_scanpos = xsp; - return false; - } - - inline bool jj_3R_249() - { - if (jj_done) return true; - if (jj_3R_59()) return true; - Token * xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_256()) { jj_scanpos = xsp; break; } - } - return false; - } - - inline bool jj_3R_187() - { - if (jj_done) return true; - if (jj_3R_194()) return true; - return false; - } - - inline bool jj_3R_175() - { - if (jj_done) return true; - if (jj_3R_59()) return true; - return false; - } - - inline bool jj_3R_197() - { - if (jj_done) return true; - if (jj_scan_token(GEQ)) return true; - return false; - } - - inline bool jj_3R_244() - { - if (jj_done) return true; - if (jj_scan_token(FALSE)) return true; - return false; - } - - inline bool jj_3R_179() - { - if (jj_done) return true; - if (jj_3R_185()) return true; - return false; - } - - inline bool jj_3R_243() - { - if (jj_done) return true; - if (jj_scan_token(TRUE)) return true; - return false; - } - inline bool jj_3R_231() { if (jj_done) return true; @@ -2056,37 +1906,18 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_144() - { - if (jj_done) return true; - if (jj_scan_token(RETURN)) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_175()) jj_scanpos = xsp; - if (jj_scan_token(SEMI_COLON)) return true; - return false; - } - - inline bool jj_3R_196() - { - if (jj_done) return true; - if (jj_scan_token(GT)) return true; - return false; - } - - inline bool jj_3R_50() + inline bool jj_3R_179() { if (jj_done) return true; - if (jj_3R_51()) return true; - if (jj_scan_token(SEMI_COLON)) return true; + if (jj_3R_185()) return true; return false; } - inline bool jj_3_18() + inline bool jj_3_19() { if (jj_done) return true; - if (jj_scan_token(OR)) return true; - if (jj_3R_62()) return true; + if (jj_scan_token(SQLAND)) return true; + if (jj_3R_63()) return true; return false; } @@ -2102,63 +1933,48 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_200() + inline bool jj_3R_198() { if (jj_done) return true; - if (jj_3R_62()) return true; + if (jj_scan_token(LT)) return true; return false; } - inline bool jj_3R_188() + inline bool jj_3R_62() { if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_196()) { - jj_scanpos = xsp; - if (jj_3R_197()) { - jj_scanpos = xsp; - if (jj_3R_198()) { - jj_scanpos = xsp; - if (jj_3R_199()) return true; - } - } - } - if (jj_3R_186()) return true; + if (jj_3R_63()) return true; return false; } - inline bool jj_3R_180() + inline bool jj_3R_142() { if (jj_done) return true; - if (jj_3R_186()) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_188()) jj_scanpos = xsp; + if (jj_scan_token(BREAK)) return true; + if (jj_scan_token(SEMI_COLON)) return true; return false; } - inline bool jj_3R_191() + inline bool jj_3R_70() { if (jj_done) return true; - if (jj_3R_200()) return true; + if (jj_scan_token(EQUALS)) return true; + if (jj_3R_59()) return true; return false; } - inline bool jj_3R_241() + inline bool jj_3R_197() { if (jj_done) return true; - if (jj_scan_token(INTEGER_LITERAL)) return true; + if (jj_scan_token(GEQ)) return true; return false; } - inline bool jj_3_13() + inline bool jj_3_1() { if (jj_done) return true; - if (jj_scan_token(L_PARENTHESIS)) return true; - if (jj_3R_46()) return true; - if (jj_scan_token(R_PARENTHESIS)) return true; - if (jj_3R_185()) return true; + if (jj_scan_token(DOT)) return true; + if (jj_scan_token(IDENTIFIER)) return true; return false; } @@ -2169,63 +1985,64 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_171() + inline bool jj_3R_241() { if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3_13()) { - jj_scanpos = xsp; - if (jj_3R_179()) return true; - } + if (jj_scan_token(INTEGER_LITERAL)) return true; return false; } - inline bool jj_3R_181() + inline bool jj_3R_51() { if (jj_done) return true; - if (jj_3R_187()) return true; + if (jj_3R_59()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_70()) jj_scanpos = xsp; return false; } - inline bool jj_3R_145() + inline bool jj_3R_196() { if (jj_done) return true; - if (jj_scan_token(WHILE)) return true; - if (jj_scan_token(L_PARENTHESIS)) return true; + if (jj_scan_token(GT)) return true; return false; } - inline bool jj_3R_115() + inline bool jj_3R_143() { if (jj_done) return true; - if (jj_3R_46()) return true; - if (jj_3R_84()) return true; + if (jj_scan_token(CONTINUE)) return true; + if (jj_scan_token(SEMI_COLON)) return true; return false; } - inline bool jj_3R_190() + inline bool jj_3_13() { if (jj_done) return true; - if (jj_scan_token(CMP_NOTEQUALS)) return true; + if (jj_scan_token(L_PARENTHESIS)) return true; + if (jj_3R_46()) return true; + if (jj_scan_token(R_PARENTHESIS)) return true; + if (jj_3R_185()) return true; return false; } - inline bool jj_3R_239() + inline bool jj_3R_171() { if (jj_done) return true; - if (jj_scan_token(_NULL)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3_13()) { + jj_scanpos = xsp; + if (jj_3R_179()) return true; + } return false; } - inline bool jj_3R_230() + inline bool jj_3R_181() { if (jj_done) return true; - if (jj_scan_token(L_BRACE)) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_248()) jj_scanpos = xsp; - if (jj_scan_token(R_BRACE)) return true; + if (jj_3R_187()) return true; return false; } @@ -2373,256 +2190,207 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_153() + inline bool jj_3R_239() { if (jj_done) return true; - if (jj_scan_token(ROLLBACK)) return true; - if (jj_scan_token(SEMI_COLON)) return true; + if (jj_scan_token(_NULL)) return true; return false; } - inline bool jj_3R_265() + inline bool jj_3R_230() { if (jj_done) return true; - if (jj_3R_250()) return true; + if (jj_scan_token(L_BRACE)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_248()) jj_scanpos = xsp; + if (jj_scan_token(R_BRACE)) return true; return false; } - inline bool jj_3R_238() + inline bool jj_3R_188() { if (jj_done) return true; - if (jj_3R_242()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_196()) { + jj_scanpos = xsp; + if (jj_3R_197()) { + jj_scanpos = xsp; + if (jj_3R_198()) { + jj_scanpos = xsp; + if (jj_3R_199()) return true; + } + } + } + if (jj_3R_186()) return true; return false; } - inline bool jj_3R_170() + inline bool jj_3_18() { if (jj_done) return true; - if (jj_scan_token(NOT)) return true; + if (jj_scan_token(OR)) return true; + if (jj_3R_62()) return true; return false; } - inline bool jj_3R_237() + inline bool jj_3R_175() { if (jj_done) return true; - if (jj_3R_241()) return true; + if (jj_3R_59()) return true; return false; } - inline bool jj_3R_189() + inline bool jj_3R_200() { if (jj_done) return true; - if (jj_scan_token(CMP_EQUALS)) return true; + if (jj_3R_62()) return true; return false; } - inline bool jj_3R_264() + inline bool jj_3R_265() { if (jj_done) return true; - if (jj_3R_231()) return true; + if (jj_3R_250()) return true; return false; } - inline bool jj_3R_236() + inline bool jj_3R_238() { if (jj_done) return true; - if (jj_3R_240()) return true; + if (jj_3R_242()) return true; return false; } - inline bool jj_3R_235() + inline bool jj_3R_264() { if (jj_done) return true; - if (jj_3R_239()) return true; + if (jj_3R_231()) return true; return false; } - inline bool jj_3R_263() + inline bool jj_3R_237() { if (jj_done) return true; - if (jj_3R_230()) return true; + if (jj_3R_241()) return true; return false; } - inline bool jj_3R_95() + inline bool jj_3R_236() { if (jj_done) return true; - if (jj_3R_115()) return true; + if (jj_3R_240()) return true; return false; } - inline bool jj_3R_166() + inline bool jj_3R_263() { if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_170()) jj_scanpos = xsp; - if (jj_3R_171()) return true; + if (jj_3R_230()) return true; return false; } - inline bool jj_3R_182() + inline bool jj_3R_235() { if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_189()) { - jj_scanpos = xsp; - if (jj_3R_190()) return true; - } - if (jj_3R_180()) return true; + if (jj_3R_239()) return true; return false; } - inline bool jj_3R_234() + inline bool jj_3R_50() { if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_235()) { - jj_scanpos = xsp; - if (jj_3R_236()) { - jj_scanpos = xsp; - if (jj_3R_237()) { - jj_scanpos = xsp; - if (jj_3R_238()) return true; - } - } - } + if (jj_3R_51()) return true; + if (jj_scan_token(SEMI_COLON)) return true; return false; } - inline bool jj_3R_261() + inline bool jj_3R_180() { if (jj_done) return true; + if (jj_3R_186()) return true; Token * xsp; xsp = jj_scanpos; - if (jj_3R_263()) { - jj_scanpos = xsp; - if (jj_3R_264()) { - jj_scanpos = xsp; - if (jj_3R_265()) return true; - } - } - return false; - } - - inline bool jj_3R_75() - { - if (jj_done) return true; - if (jj_3R_99()) return true; - return false; - } - - inline bool jj_3R_74() - { - if (jj_done) return true; - if (jj_3R_98()) return true; + if (jj_3R_188()) jj_scanpos = xsp; return false; } - inline bool jj_3R_152() + inline bool jj_3R_144() { if (jj_done) return true; - if (jj_scan_token(COMMIT)) return true; + if (jj_scan_token(RETURN)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_175()) jj_scanpos = xsp; if (jj_scan_token(SEMI_COLON)) return true; return false; } - inline bool jj_3R_73() - { - if (jj_done) return true; - if (jj_3R_97()) return true; - return false; - } - - inline bool jj_3R_72() - { - if (jj_done) return true; - if (jj_3R_96()) return true; - return false; - } - - inline bool jj_3R_71() - { - if (jj_done) return true; - if (jj_3R_95()) return true; - return false; - } - - inline bool jj_3_7() + inline bool jj_3R_170() { if (jj_done) return true; - if (jj_3R_50()) return true; + if (jj_scan_token(NOT)) return true; return false; } - inline bool jj_3R_172() + inline bool jj_3R_261() { if (jj_done) return true; - if (jj_3R_180()) return true; Token * xsp; xsp = jj_scanpos; - if (jj_3R_182()) jj_scanpos = xsp; - return false; - } - - inline bool jj_3_6() - { - if (jj_done) return true; - if (jj_3R_49()) return true; - return false; - } - - inline bool jj_3R_146() - { - if (jj_done) return true; - if (jj_scan_token(DO)) return true; - if (jj_3R_53()) return true; - return false; - } - - inline bool jj_3R_184() - { - if (jj_done) return true; - if (jj_3R_191()) return true; - return false; - } - - inline bool jj_3R_165() - { - if (jj_done) return true; - if (jj_scan_token(193)) return true; + if (jj_3R_263()) { + jj_scanpos = xsp; + if (jj_3R_264()) { + jj_scanpos = xsp; + if (jj_3R_265()) return true; + } + } return false; } - inline bool jj_3R_53() + inline bool jj_3R_234() { if (jj_done) return true; Token * xsp; xsp = jj_scanpos; - if (jj_3_6()) { - jj_scanpos = xsp; - if (jj_3_7()) { - jj_scanpos = xsp; - if (jj_3R_71()) { - jj_scanpos = xsp; - if (jj_3R_72()) { + if (jj_3R_235()) { jj_scanpos = xsp; - if (jj_3R_73()) { + if (jj_3R_236()) { jj_scanpos = xsp; - if (jj_3R_74()) { + if (jj_3R_237()) { jj_scanpos = xsp; - if (jj_3R_75()) return true; - } - } - } + if (jj_3R_238()) return true; } } } return false; } + inline bool jj_3R_191() + { + if (jj_done) return true; + if (jj_3R_200()) return true; + return false; + } + + inline bool jj_3R_166() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_170()) jj_scanpos = xsp; + if (jj_3R_171()) return true; + return false; + } + + inline bool jj_3R_190() + { + if (jj_done) return true; + if (jj_scan_token(CMP_NOTEQUALS)) return true; + return false; + } + inline bool jj_3R_48() { if (jj_done) return true; @@ -2758,11 +2526,10 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_151() + inline bool jj_3R_189() { if (jj_done) return true; - if (jj_scan_token(BEGIN)) return true; - if (jj_scan_token(SEMI_COLON)) return true; + if (jj_scan_token(CMP_EQUALS)) return true; return false; } @@ -2773,6 +2540,64 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } + inline bool jj_3R_115() + { + if (jj_done) return true; + if (jj_3R_46()) return true; + if (jj_3R_84()) return true; + return false; + } + + inline bool jj_3R_153() + { + if (jj_done) return true; + if (jj_scan_token(ROLLBACK)) return true; + if (jj_scan_token(SEMI_COLON)) return true; + return false; + } + + inline bool jj_3R_145() + { + if (jj_done) return true; + if (jj_scan_token(WHILE)) return true; + if (jj_scan_token(L_PARENTHESIS)) return true; + return false; + } + + inline bool jj_3R_165() + { + if (jj_done) return true; + if (jj_scan_token(193)) return true; + return false; + } + + inline bool jj_3R_182() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_189()) { + jj_scanpos = xsp; + if (jj_3R_190()) return true; + } + if (jj_3R_180()) return true; + return false; + } + + inline bool jj_3R_84() + { + if (jj_done) return true; + if (jj_3R_48()) return true; + return false; + } + + inline bool jj_3R_226() + { + if (jj_done) return true; + if (jj_scan_token(FALSE)) return true; + return false; + } + inline bool jj_3R_173() { if (jj_done) return true; @@ -2780,6 +2605,13 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } + inline bool jj_3R_184() + { + if (jj_done) return true; + if (jj_3R_191()) return true; + return false; + } + inline bool jj_3R_159() { if (jj_done) return true; @@ -2790,10 +2622,178 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3_8() + inline bool jj_3R_225() { if (jj_done) return true; - if (jj_3R_51()) return true; + if (jj_scan_token(TRUE)) return true; + return false; + } + + inline bool jj_3R_152() + { + if (jj_done) return true; + if (jj_scan_token(COMMIT)) return true; + if (jj_scan_token(SEMI_COLON)) return true; + return false; + } + + inline bool jj_3R_95() + { + if (jj_done) return true; + if (jj_3R_115()) return true; + return false; + } + + inline bool jj_3R_172() + { + if (jj_done) return true; + if (jj_3R_180()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_182()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_177() + { + if (jj_done) return true; + if (jj_3R_183()) return true; + return false; + } + + inline bool jj_3R_215() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_225()) { + jj_scanpos = xsp; + if (jj_3R_226()) return true; + } + return false; + } + + inline bool jj_3R_75() + { + if (jj_done) return true; + if (jj_3R_99()) return true; + return false; + } + + inline bool jj_3R_74() + { + if (jj_done) return true; + if (jj_3R_98()) return true; + return false; + } + + inline bool jj_3R_73() + { + if (jj_done) return true; + if (jj_3R_97()) return true; + return false; + } + + inline bool jj_3R_164() + { + if (jj_done) return true; + if (jj_scan_token(PLUSPLUS)) return true; + return false; + } + + inline bool jj_3R_72() + { + if (jj_done) return true; + if (jj_3R_96()) return true; + return false; + } + + inline bool jj_3R_232() + { + if (jj_done) return true; + if (jj_scan_token(L_PARENTHESIS)) return true; + if (jj_3R_59()) return true; + if (jj_scan_token(R_PARENTHESIS)) return true; + return false; + } + + inline bool jj_3R_71() + { + if (jj_done) return true; + if (jj_3R_95()) return true; + return false; + } + + inline bool jj_3R_83() + { + if (jj_done) return true; + if (jj_scan_token(CHARACTER_LITERAL)) return true; + return false; + } + + inline bool jj_3_7() + { + if (jj_done) return true; + if (jj_3R_50()) return true; + return false; + } + + inline bool jj_3_6() + { + if (jj_done) return true; + if (jj_3R_49()) return true; + return false; + } + + inline bool jj_3R_151() + { + if (jj_done) return true; + if (jj_scan_token(BEGIN)) return true; + if (jj_scan_token(SEMI_COLON)) return true; + return false; + } + + inline bool jj_3R_163() + { + if (jj_done) return true; + if (jj_scan_token(MINUSMINUS)) return true; + return false; + } + + inline bool jj_3R_82() + { + if (jj_done) return true; + if (jj_scan_token(SQL_STRING_LITERAL)) return true; + return false; + } + + inline bool jj_3R_178() + { + if (jj_done) return true; + if (jj_3R_184()) return true; + return false; + } + + inline bool jj_3R_146() + { + if (jj_done) return true; + if (jj_scan_token(DO)) return true; + if (jj_3R_53()) return true; + return false; + } + + inline bool jj_3R_81() + { + if (jj_done) return true; + if (jj_scan_token(INTEGER_LITERAL)) return true; + return false; + } + + inline bool jj_3R_174() + { + if (jj_done) return true; + if (jj_scan_token(BIT_AND)) return true; + if (jj_3R_172()) return true; return false; } diff --git a/src_smartcontract/engine/compiler/ParseErrorHandler.cpp b/src_smartcontract/engine/compiler/ParseErrorHandler.cpp index 1143adc..7b3c2d3 100644 --- a/src_smartcontract/engine/compiler/ParseErrorHandler.cpp +++ b/src_smartcontract/engine/compiler/ParseErrorHandler.cpp @@ -9,25 +9,45 @@ #include "engine/compiler/CompileError.h" #include "base/UnicodeString.h" +#include "alinous_lang/ParseException.h" + namespace alinous { -ParseErrorHandler::ParseErrorHandler() { +ParseErrorHandler::ParseErrorHandler() : ErrorHandler() { + this->devMode = false; } ParseErrorHandler::~ParseErrorHandler() { this->list.deleteElements(); } +/** + * ErrorHandler::handleUnexpectedToken(expectedKind, expectedToken, actual, parser); // default + * @param expectedKind + * @param expectedToken + * @param actual + * @param parser + */ void ParseErrorHandler::handleUnexpectedToken(int expectedKind, const JJString& expectedToken, Token* actual, AlinousLang* parser) { CompileError* error = new CompileError(new UnicodeString(expectedToken.c_str()), new UnicodeString(actual->image.c_str()), actual->beginLine, actual->beginColumn); list.addElement(error); - //ErrorHandler::handleUnexpectedToken(expectedKind, expectedToken, actual, parser); + this->error_count++; + + ParseException* p = new ParseException(); + throw p; +} + +void ParseErrorHandler::handleParseError(Token *last, Token *unexpected, const JJSimpleString &production, AlinousLang *parser) { + this->error_count++; + + ParseException* p = new ParseException(); + throw p; } bool ParseErrorHandler::hasError() const noexcept { - return !this->list.isEmpty(); + return !this->list.isEmpty() || this->error_count != 0; } } /* namespace alinous */ diff --git a/src_smartcontract/engine/compiler/ParseErrorHandler.h b/src_smartcontract/engine/compiler/ParseErrorHandler.h index d8c329d..3ad8f93 100644 --- a/src_smartcontract/engine/compiler/ParseErrorHandler.h +++ b/src_smartcontract/engine/compiler/ParseErrorHandler.h @@ -22,6 +22,7 @@ class ParseErrorHandler : public ErrorHandler { virtual ~ParseErrorHandler(); virtual void handleUnexpectedToken(int expectedKind, const JJString& expectedToken, Token *actual, AlinousLang *parser); + virtual void handleParseError(Token *last, Token *unexpected, const JJSimpleString& production, AlinousLang *parser); bool hasError() const noexcept; @@ -31,6 +32,7 @@ class ParseErrorHandler : public ErrorHandler { private: ArrayList list; + bool devMode; }; } /* namespace alinous */ diff --git a/src_smartcontract/engine/jj/alinous.jj b/src_smartcontract/engine/jj/alinous.jj index 0b48267..7f864ac 100644 --- a/src_smartcontract/engine/jj/alinous.jj +++ b/src_smartcontract/engine/jj/alinous.jj @@ -357,7 +357,7 @@ MORE: CompilationUnit* compilationUnit() : { - CompilationUnit* unit = new CompilationUnit(); + CompilationUnit* unit = new CompilationUnit(); __STP(unit); PackageDeclare* pkg = nullptr; ImportsDeclare* imports = nullptr; ClassDeclare* clazz = nullptr; @@ -381,12 +381,12 @@ CompilationUnit* compilationUnit() : )+ { - return unit; + return __STP_MV(unit); } } ImportsDeclare* importsDeclare() : { - ImportsDeclare* importsDeclare = new ImportsDeclare(); + ImportsDeclare* importsDeclare = new ImportsDeclare(); __STP(importsDeclare); ImportDeclare* dec = nullptr; } { @@ -400,12 +400,12 @@ ImportsDeclare* importsDeclare() : { } { __ONERROR(importsDeclare); - return importsDeclare; + return __STP_MV(importsDeclare); } } ImportDeclare* importDeclare() : { - ImportDeclare* dec = new ImportDeclare(); + ImportDeclare* dec = new ImportDeclare(); __STP(dec); Token* t = nullptr; } { @@ -432,19 +432,19 @@ ImportDeclare* importDeclare() : { dec->setPosition(t); } { - __ONERROR(dec); - return dec; + return __STP_MV(dec); } } PackageDeclare* packageDeclare() : { PackageDeclare* pkg = nullptr; + StackRelease __pkg; PackageNameDeclare* name = nullptr; Token* t = nullptr; } { t="package" { - pkg=new PackageDeclare(); + pkg=new PackageDeclare(); __pkg.reset(pkg); pkg->setPosition(t); } @@ -457,19 +457,19 @@ PackageDeclare* packageDeclare() : { pkg->setPosition(t); } { - __ONERROR(pkg); - return pkg; + return __pkg.move(); } } PackageNameDeclare* packageNameDeclare() : { PackageNameDeclare* names = nullptr; + StackRelease __names; Token* t = nullptr; } { t=< IDENTIFIER > { - names = new PackageNameDeclare(); + names = new PackageNameDeclare(); __names.reset(names); names->addSegment(_STR(t)); names->setPosition(t); } @@ -483,8 +483,7 @@ PackageNameDeclare* packageNameDeclare() : { } { - __ONERROR(names); - return names; + return __names.move(); } } @@ -492,6 +491,8 @@ PackageNameDeclare* packageNameDeclare() : ClassDeclare* classDeclare() : { ClassDeclare* clazz = nullptr; + StackRelease __clazz; + GenericsClassDeclare* gclazz = nullptr; GenericsParameter* param = nullptr; Token* cls = nullptr; @@ -505,7 +506,7 @@ ClassDeclare* classDeclare() : { ( cls="class" { - clazz = new ClassDeclare(); + clazz = new ClassDeclare(); __clazz.reset(clazz); } | cls="interface" { @@ -591,14 +592,13 @@ ClassDeclare* classDeclare() : clazz->setBlock(block); } { - __ONERROR(clazz); - return clazz; + return __clazz.move(); } } ClassExtends* classExtends() : { - ClassExtends* extends = new ClassExtends(); + ClassExtends* extends = new ClassExtends(); __STP(extends); ClassName* name = nullptr; Token* t = nullptr; } @@ -611,13 +611,12 @@ ClassExtends* classExtends() : extends->setClassName(name); } { - __ONERROR(extends); - return extends; + return __STP_MV(extends); } } ClassImplements* classImplements() :{ - ClassImplements* implements = new ClassImplements(); + ClassImplements* implements = new ClassImplements(); __STP(implements); ClassName* name = nullptr; Token* t = nullptr; } @@ -641,14 +640,13 @@ ClassImplements* classImplements() :{ {} { - __ONERROR(implements); - return implements; + return __STP_MV(implements); } } ClassName* className() : { - ClassName* name = new ClassName(); + ClassName* name = new ClassName(); __STP(name); Token* t = nullptr; } { @@ -668,14 +666,14 @@ ClassName* className() : )* {} { - __ONERROR(name); - return name; + return __STP_MV(name); } } ClassDeclareBlock* classDeclareBlock() : { ClassDeclareBlock* block = nullptr; + StackRelease __block; Token* begin, *end; MethodDeclare* method = nullptr; @@ -688,7 +686,7 @@ ClassDeclareBlock* classDeclareBlock() : } { begin="{" { - block = new ClassDeclareBlock(); + block = new ClassDeclareBlock(); __block.reset(block); block->setPosition(begin); } @@ -738,13 +736,12 @@ ClassDeclareBlock* classDeclareBlock() : block->setPosition(end); } { - __ONERROR(block); - return block; + return __block.move(); } } MethodDeclare* methodDeclare(AccessControlDeclare* ctrl, bool _static, AbstractType* type, Token* identifier) : { - MethodDeclare* method = new MethodDeclare(); + MethodDeclare* method = new MethodDeclare(); __STP(method); method->setPosition(ctrl); @@ -776,13 +773,12 @@ MethodDeclare* methodDeclare(AccessControlDeclare* ctrl, bool _static, AbstractT { } { - __ONERROR(method); - return method; + return __STP_MV(method); } } MemberVariableDeclare* memberVariableDeclare(AccessControlDeclare* ctrl, bool _static, AbstractType* type, Token* identifier) : { - MemberVariableDeclare* variable = new MemberVariableDeclare(); + MemberVariableDeclare* variable = new MemberVariableDeclare(); __STP(variable); Token* t = nullptr; variable->setPosition(ctrl); @@ -810,14 +806,13 @@ MemberVariableDeclare* memberVariableDeclare(AccessControlDeclare* ctrl, bool _s } { - __ONERROR(variable); - return variable; + return __STP_MV(variable); } } AccessControlDeclare* accessControlDeclare() : { Token* t = nullptr; - AccessControlDeclare* ctrl = new AccessControlDeclare(); + AccessControlDeclare* ctrl = new AccessControlDeclare(); __STP(ctrl); } { ( @@ -837,13 +832,12 @@ AccessControlDeclare* accessControlDeclare() : { } ) { - __ONERROR(ctrl); - return ctrl; + return __STP_MV(ctrl); } } ArgumentsListDeclare* argumentsListDeclare() : { - ArgumentsListDeclare* arguments = new ArgumentsListDeclare(); + ArgumentsListDeclare* arguments = new ArgumentsListDeclare(); __STP(arguments); Token* t = nullptr; ArgumentDeclare* arg = nullptr; } @@ -868,14 +862,13 @@ ArgumentsListDeclare* argumentsListDeclare() : { arguments->setPosition(t); } { - __ONERROR(arguments); - return arguments; + return __STP_MV(arguments); } } ArgumentDeclare* argumentDeclare() : { - ArgumentDeclare* arg = new ArgumentDeclare(); + ArgumentDeclare* arg = new ArgumentDeclare(); __STP(arg); AbstractType* type = nullptr; Token* t = nullptr; } @@ -891,8 +884,7 @@ ArgumentDeclare* argumentDeclare() : { } { - __ONERROR(arg); - return arg; + return __STP_MV(arg); } } @@ -915,7 +907,6 @@ AbstractType* typeDeclare() : { { } { - __ONERROR(dec); return dec; } } @@ -946,13 +937,12 @@ AbstractType* typeBody() : { dec=objectType() ) { - __ONERROR(dec); return dec; } } ObjectType* objectType() : { - ObjectType* dec = new ObjectType(); + ObjectType* dec = new ObjectType(); __STP(dec); PackageNameDeclare* packageName = nullptr; Token* t=nullptr; GenericsObjectType* geneticsObject = nullptr; @@ -1005,13 +995,12 @@ ObjectType* objectType() : { { - __ONERROR(dec); - return dec; + return __STP_MV(dec); } } BoolType* boolType() : { - BoolType* dec = new BoolType(); + BoolType* dec = new BoolType(); __STP(dec); Token* t=nullptr; } { @@ -1019,13 +1008,12 @@ BoolType* boolType() : { dec->setPositions(_P(t, t)); } { - __ONERROR(dec); - return dec; + return __STP_MV(dec); } } ByteType* byteType() : { - ByteType* dec = new ByteType(); + ByteType* dec = new ByteType(); __STP(dec); Token* t=nullptr; } { @@ -1033,13 +1021,12 @@ ByteType* byteType() : { dec->setPositions(_P(t, t)); } { - __ONERROR(dec); - return dec; + return __STP_MV(dec); } } CharType* charType() : { - CharType* dec = new CharType(); + CharType* dec = new CharType(); __STP(dec); Token* t=nullptr; } { @@ -1047,13 +1034,12 @@ CharType* charType() : { dec->setPositions(_P(t, t)); } { - __ONERROR(dec); - return dec; + return __STP_MV(dec); } } ShortType* shortType() : { - ShortType* dec = new ShortType(); + ShortType* dec = new ShortType(); __STP(dec); Token* t=nullptr; } { @@ -1061,13 +1047,12 @@ ShortType* shortType() : { dec->setPositions(_P(t, t)); } { - __ONERROR(dec); - return dec; + return __STP_MV(dec); } } IntType* intType() : { - IntType* dec = new IntType(); + IntType* dec = new IntType(); __STP(dec); Token* t=nullptr; } { @@ -1075,13 +1060,12 @@ IntType* intType() : { dec->setPositions(_P(t, t)); } { - __ONERROR(dec); - return dec; + return __STP_MV(dec); } } LongType* longType() : { - LongType* dec = new LongType(); + LongType* dec = new LongType(); __STP(dec); Token* t=nullptr; } { @@ -1089,13 +1073,12 @@ LongType* longType() : { dec->setPositions(_P(t, t)); } { - __ONERROR(dec); - return dec; + return __STP_MV(dec); } } StringType* stringType() : { - StringType* dec = new StringType(); + StringType* dec = new StringType(); __STP(dec); Token* t=nullptr; } { @@ -1103,13 +1086,12 @@ StringType* stringType() : { dec->setPositions(_P(t, t)); } { - __ONERROR(dec); - return dec; + return __STP_MV(dec); } } VoidType* voidType() : { - VoidType* dec = new VoidType(); + VoidType* dec = new VoidType(); __STP(dec); Token* t=nullptr; } { @@ -1117,13 +1099,12 @@ VoidType* voidType() : { dec->setPositions(_P(t, t)); } { - __ONERROR(dec); - return dec; + return __STP_MV(dec); } } DomType* domType() : { - DomType* dec = new DomType(); + DomType* dec = new DomType(); __STP(dec); Token* t=nullptr; } { @@ -1131,8 +1112,7 @@ DomType* domType() : { dec->setPositions(_P(t, t)); } { - __ONERROR(dec); - return dec; + return __STP_MV(dec); } } @@ -1147,20 +1127,33 @@ AbstractStatement* statement() : { AbstractStatement* stmt = nullptr; } { - ( - LOOKAHEAD(3) stmt=statementBlock() | - LOOKAHEAD(4) stmt=substitutionStatement() | - stmt=variableDeclareStatement() | - //stmt=expressionStatement() | - stmt=ctrlStatement() | - stmt=blankStatement() | - stmt=ddlStatement() | - stmt=sqlDmlStatement() - ) - {} - { - return stmt; + try { + ( + LOOKAHEAD(3) stmt=statementBlock() | + LOOKAHEAD(4) stmt=substitutionStatement() | + stmt=variableDeclareStatement() | + //stmt=expressionStatement() | + stmt=ctrlStatement() | + stmt=blankStatement() | + stmt=ddlStatement() | + stmt=sqlDmlStatement() + ) + {} + { + return stmt; + } } + catch(ParseException* e){ + std::exception_ptr p = std::current_exception(); + try{ + std::rethrow_exception(p); + }catch(ParseException* e){ + if(e != nullptr){ + delete e; + } + } + } + } VariableDeclareStatement* variableDeclareStatement() : { @@ -1173,14 +1166,13 @@ VariableDeclareStatement* variableDeclareStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); return stmt; } } VariableDeclareStatement* __variableDeclareStatement() : { - VariableDeclareStatement* stmt = new VariableDeclareStatement(); + VariableDeclareStatement* stmt = new VariableDeclareStatement(); __STP(stmt); AbstractType* type = nullptr; VariableIdentifier* valId = nullptr; AbstractExpression* exp = nullptr; @@ -1208,8 +1200,7 @@ VariableDeclareStatement* __variableDeclareStatement() : { ] { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } @@ -1230,19 +1221,25 @@ AbstractStatement* substitutionStatement() : { AbstractStatement* __substitutionStatement() : { AbstractStatement* stmt = nullptr; + StackRelease __stmt; AbstractExpression* first = nullptr; + StackRelease __first; + AbstractExpression* exp = nullptr; Token* t = nullptr; } { first=expression() + { + __first.reset(first); + } [ t="=" exp=expression() { SubstitutionStatement* sstmt = new SubstitutionStatement(); - stmt = sstmt; - sstmt->setVariableId(first); + stmt = sstmt; __stmt.reset(stmt); + sstmt->setVariableId(__first.move()); sstmt->setPosition(first); sstmt->setExpression(exp); @@ -1252,19 +1249,18 @@ AbstractStatement* __substitutionStatement() : { { if(stmt == nullptr){ ExpressionStatement* exstmt = new ExpressionStatement(); - stmt = exstmt; - exstmt->setExpression(first); + stmt = exstmt; __stmt.reset(stmt); + exstmt->setExpression(__first.move()); exstmt->setPosition(first); } } { - __ONERROR(stmt); - return stmt; + return __stmt.move(); } } BlankStatement* blankStatement() : { - BlankStatement* stmt = new BlankStatement(); + BlankStatement* stmt = new BlankStatement(); __STP(stmt); Token* t = nullptr; } { @@ -1274,13 +1270,12 @@ BlankStatement* blankStatement() : { } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } StatementBlock* statementBlock() : { - StatementBlock* block = new StatementBlock(); + StatementBlock* block = new StatementBlock(); __STP(block); AbstractStatement* stmt = nullptr; Token* t = nullptr; } @@ -1300,14 +1295,13 @@ StatementBlock* statementBlock() : { block->setPosition(t); } { - __ONERROR(block); - return block; + return __STP_MV(block); } } /* ExpressionStatement* expressionStatement() : { - ExpressionStatement* stmt = new ExpressionStatement(); + ExpressionStatement* stmt = new ExpressionStatement(); __STP(stmt); Token* t = nullptr; AbstractExpression* exp = nullptr; } @@ -1320,8 +1314,7 @@ ExpressionStatement* expressionStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } */ @@ -1353,7 +1346,7 @@ AbstractStatement* ctrlStatement() : { } TryStatement* tryStatement() : { - TryStatement* stmt = new TryStatement(); + TryStatement* stmt = new TryStatement(); __STP(stmt); StatementBlock* block = nullptr; Token* t = nullptr; @@ -1384,13 +1377,12 @@ TryStatement* tryStatement() : { ] { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } FinallyStatement* finallyStatement() : { - FinallyStatement* stmt = new FinallyStatement(); + FinallyStatement* stmt = new FinallyStatement(); __STP(stmt); StatementBlock* block = nullptr; Token* t = nullptr; } @@ -1403,13 +1395,12 @@ FinallyStatement* finallyStatement() : { stmt->setPosition(block); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } CatchStatement* catchStatement() : { - CatchStatement* stmt = new CatchStatement(); + CatchStatement* stmt = new CatchStatement(); __STP(stmt); StatementBlock* block = nullptr; Token* t = nullptr; @@ -1438,13 +1429,12 @@ CatchStatement* catchStatement() : { } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } ThrowStatement* throwStatement() : { - ThrowStatement* stmt = new ThrowStatement(); + ThrowStatement* stmt = new ThrowStatement(); __STP(stmt); AbstractExpression* exp = nullptr; Token* t = nullptr; } @@ -1461,13 +1451,12 @@ ThrowStatement* throwStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } ForStatement* forStatement() : { - ForStatement* stmt = new ForStatement(); + ForStatement* stmt = new ForStatement(); __STP(stmt); AbstractExpression* exp = nullptr; AbstractStatement* st = nullptr; Token* t = nullptr; @@ -1510,8 +1499,7 @@ ForStatement* forStatement() : { } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } @@ -1525,13 +1513,12 @@ AbstractStatement* forInnerStatement() : { stmt=__variableDeclareStatement() ) { - __ONERROR(stmt); return stmt; } } DoWhileStatement* doWhileStatement() : { - DoWhileStatement* stmt = new DoWhileStatement(); + DoWhileStatement* stmt = new DoWhileStatement(); __STP(stmt); AbstractExpression* exp = nullptr; AbstractStatement* st = nullptr; Token* t = nullptr; @@ -1560,13 +1547,12 @@ DoWhileStatement* doWhileStatement() : { } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } WhileStatement* whileStatement() : { - WhileStatement* stmt = new WhileStatement(); + WhileStatement* stmt = new WhileStatement(); __STP(stmt); AbstractExpression* exp = nullptr; AbstractStatement* st = nullptr; Token* t = nullptr; @@ -1593,13 +1579,12 @@ WhileStatement* whileStatement() : { } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } ReturnStatement* returnStatement() : { - ReturnStatement* stmt = new ReturnStatement(); + ReturnStatement* stmt = new ReturnStatement(); __STP(stmt); AbstractExpression* exp = nullptr; Token* t = nullptr; } @@ -1617,13 +1602,12 @@ ReturnStatement* returnStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } ContinueStatement* continueStatement() : { - ContinueStatement* stmt = new ContinueStatement(); + ContinueStatement* stmt = new ContinueStatement(); __STP(stmt); Token* t = nullptr; } { @@ -1634,14 +1618,13 @@ ContinueStatement* continueStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } BreakStatement* breakStatement() : { - BreakStatement* stmt = new BreakStatement(); + BreakStatement* stmt = new BreakStatement(); __STP(stmt); Token* t = nullptr; } { @@ -1652,13 +1635,12 @@ BreakStatement* breakStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } IfStatement* ifStatement() : { - IfStatement* ifstmt = new IfStatement(); + IfStatement* ifstmt = new IfStatement(); __STP(ifstmt); AbstractExpression* exp; AbstractStatement* stmt; Token* t = nullptr; @@ -1698,13 +1680,12 @@ IfStatement* ifStatement() : { ] { - __ONERROR(ifstmt); - return ifstmt; + return __STP_MV(ifstmt); } } IfStatement* elseifStatement() : { - IfStatement* ifstmt = new IfStatement(); + IfStatement* ifstmt = new IfStatement(); __STP(ifstmt); AbstractExpression* exp; AbstractStatement* stmt; Token* t = nullptr; @@ -1726,8 +1707,7 @@ IfStatement* elseifStatement() : { ifstmt->setPosition(stmt); } { - __ONERROR(ifstmt); - return ifstmt; + return __STP_MV(ifstmt); } } @@ -1755,9 +1735,15 @@ AbstractExpression* conditionalOrExpression() : { ConditionalOrExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { left=conditionalAndExpression() + { + __left.reset(left); + } + ( t="||" { @@ -1765,7 +1751,7 @@ AbstractExpression* conditionalOrExpression() : { exp = new ConditionalOrExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(exp); } exp->setPosition(t); @@ -1778,8 +1764,7 @@ AbstractExpression* conditionalOrExpression() : { )* {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -1788,9 +1773,14 @@ AbstractExpression* conditionalAndExpression() : { ConditionalAndExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { left=orExpression() + { + __left.reset(left); + } ( t="&&" { @@ -1798,7 +1788,7 @@ AbstractExpression* conditionalAndExpression() : { exp = new ConditionalAndExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -1811,8 +1801,7 @@ AbstractExpression* conditionalAndExpression() : { )* {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -1821,9 +1810,14 @@ AbstractExpression* orExpression() : { OrExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { left=exclusiveOrExpression() + { + __left.reset(left); + } ( t="|" { @@ -1831,7 +1825,7 @@ AbstractExpression* orExpression() : { exp = new OrExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -1844,8 +1838,7 @@ AbstractExpression* orExpression() : { )* {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -1854,9 +1847,14 @@ AbstractExpression* exclusiveOrExpression() : { ExclusiveOrExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { left=andExpression() + { + __left.reset(left); + } ( t="^" { @@ -1864,7 +1862,7 @@ AbstractExpression* exclusiveOrExpression() : { exp = new ExclusiveOrExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -1877,8 +1875,7 @@ AbstractExpression* exclusiveOrExpression() : { )* {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -1887,9 +1884,14 @@ AbstractExpression* andExpression() : { AndExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { left=equalityExpression() + { + __left.reset(left); + } ( t="&" { @@ -1897,7 +1899,7 @@ AbstractExpression* andExpression() : { exp = new AndExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -1910,8 +1912,7 @@ AbstractExpression* andExpression() : { )* {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -1920,9 +1921,14 @@ AbstractExpression* equalityExpression() : { EqualityExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { left=relationalExpression() + { + __left.reset(left); + } [ ( t="==" { @@ -1939,7 +1945,7 @@ AbstractExpression* equalityExpression() : { exp = new EqualityExpression(); exp->setPosition(left); exp->setLeft(left); - left = exp; + left = exp; __left.reset(left); exp->setPosition(t); exp->setOp(EqualityExpression::NOT_EQ); @@ -1953,8 +1959,7 @@ AbstractExpression* equalityExpression() : { ] {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -1964,17 +1969,21 @@ AbstractExpression* relationalExpression() : { RelationalExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { left=shiftExpression() - + { + __left.reset(left); + } [ ( t=">" { exp = new RelationalExpression(); exp->setPosition(left); exp->setLeft(left); - left = exp; + left = exp; __left.reset(left); exp->setPosition(t); @@ -1985,7 +1994,7 @@ AbstractExpression* relationalExpression() : { exp = new RelationalExpression(); exp->setPosition(left); exp->setLeft(left); - left = exp; + left = exp; __left.reset(left); exp->setPosition(t); exp->setOp(RelationalExpression::GT_EQ); @@ -1995,7 +2004,7 @@ AbstractExpression* relationalExpression() : { exp = new RelationalExpression(); exp->setPosition(left); exp->setLeft(left); - left = exp; + left = exp; __left.reset(left); exp->setPosition(t); @@ -2006,7 +2015,7 @@ AbstractExpression* relationalExpression() : { exp = new RelationalExpression(); exp->setPosition(left); exp->setLeft(left); - left = exp; + left = exp; __left.reset(left); exp->setPosition(t); exp->setOp(RelationalExpression::LT_EQ); @@ -2020,8 +2029,7 @@ AbstractExpression* relationalExpression() : { ] {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -2030,9 +2038,14 @@ AbstractExpression* shiftExpression() : { ShiftExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { left=additiveExpression() + { + __left.reset(left); + } ( ( t="<<" { @@ -2040,7 +2053,7 @@ AbstractExpression* shiftExpression() : { exp = new ShiftExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -2052,7 +2065,7 @@ AbstractExpression* shiftExpression() : { exp = new ShiftExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -2067,8 +2080,7 @@ AbstractExpression* shiftExpression() : { )* {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -2077,9 +2089,14 @@ AbstractExpression* additiveExpression() : { AddExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { left=multiplicativeExpression() + { + __left.reset(left); + } (LOOKAHEAD(2) ( t="+" { @@ -2087,7 +2104,7 @@ AbstractExpression* additiveExpression() : { exp = new AddExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -2099,7 +2116,7 @@ AbstractExpression* additiveExpression() : { exp = new AddExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -2114,8 +2131,7 @@ AbstractExpression* additiveExpression() : { )* {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -2124,9 +2140,14 @@ AbstractExpression* multiplicativeExpression() : { MultiplicativeExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { left=negateExpression() + { + __left.reset(left); + } ( ( t="*" { @@ -2134,7 +2155,7 @@ AbstractExpression* multiplicativeExpression() : { exp = new MultiplicativeExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->addOpe(MultiplicativeExpression::MUL); exp->setPosition(t); @@ -2156,7 +2177,7 @@ AbstractExpression* multiplicativeExpression() : { exp = new MultiplicativeExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->addOpe(MultiplicativeExpression::MOD); exp->setPosition(t); @@ -2170,8 +2191,7 @@ AbstractExpression* multiplicativeExpression() : { )* {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -2180,18 +2200,20 @@ AbstractExpression* negateExpression() :{ NegateExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { [ t="-" { exp = new NegateExpression(); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } ] right=postIncrementExpression() { if(left==nullptr){ - left = right; + left = right; __left.reset(left); } else{ exp->setExpression(right); @@ -2199,8 +2221,7 @@ AbstractExpression* negateExpression() :{ } } { - __ONERROR(left); - return left; + return __left.move(); } } @@ -2208,10 +2229,14 @@ AbstractExpression* postIncrementExpression() : { Token* t = nullptr; PostIncrementExpression* exp = nullptr; AbstractExpression* left = nullptr; + + StackRelease __left; } { left=preIncrementExpression() - + { + __left.reset(left); + } [LOOKAHEAD(2) ( t="--" { @@ -2220,7 +2245,7 @@ AbstractExpression* postIncrementExpression() : { exp->setOpe(PostIncrementExpression::MINUS); exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } | t="++" { @@ -2229,14 +2254,13 @@ AbstractExpression* postIncrementExpression() : { exp->setOpe(PostIncrementExpression::PLUS); exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } ) ] {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -2246,6 +2270,8 @@ AbstractExpression* preIncrementExpression() : { PreIncrementExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { [ @@ -2254,20 +2280,20 @@ AbstractExpression* preIncrementExpression() : { exp = new PreIncrementExpression(); exp->setOpe(PreIncrementExpression::MINUS); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } | t="++" { exp = new PreIncrementExpression(); exp->setOpe(PreIncrementExpression::PLUS); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } ) ] right=bitReverseExpression() { if(left==nullptr){ - left = right; + left = right; __left.reset(left); } else{ exp->setExpression(right); @@ -2275,8 +2301,7 @@ AbstractExpression* preIncrementExpression() : { } } { - __ONERROR(left); - return left; + return __left.move(); } } @@ -2285,18 +2310,20 @@ AbstractExpression* bitReverseExpression() : { BitReverseExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { [ t="~" { exp = new BitReverseExpression(); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } ] right=notExpression() { if(left==nullptr){ - left = right; + left = right; __left.reset(left); } else{ exp->setExpression(right); @@ -2304,8 +2331,7 @@ AbstractExpression* bitReverseExpression() : { } } { - __ONERROR(left); - return left; + return __left.move(); } } @@ -2314,18 +2340,20 @@ AbstractExpression* notExpression() : { NotExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { [ t="!" { exp = new NotExpression(); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } ] right=castExpression() { if(left==nullptr){ - left = right; + left = right; __left.reset(left); } else{ exp->setExpression(right); @@ -2333,8 +2361,7 @@ AbstractExpression* notExpression() : { } } { - __ONERROR(left); - return left; + return __left.move(); } } @@ -2344,6 +2371,8 @@ AbstractExpression* castExpression() : { AbstractType* type = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { (LOOKAHEAD(3) @@ -2351,7 +2380,7 @@ AbstractExpression* castExpression() : { t="(" { exp = new CastExpression(); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } type=typeDeclare() { @@ -2370,14 +2399,13 @@ AbstractExpression* castExpression() : { | ( right=memberReferenceExpression() { - left = right; + left = right; __left.reset(left); } ) ) { - __ONERROR(left); - return left; + return __left.move(); } } @@ -2386,16 +2414,21 @@ AbstractExpression* memberReferenceExpression() :{ Token* t = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { - left=arrayReferenceExpression() + left=arrayReferenceExpression() + { + __left.reset(left); + } ( "." right=arrayReferenceExpression() { if(exp == nullptr){ exp = new MemberReferenceExpression(); exp->addExp(left); exp->setPosition(left); - left = exp; + left = exp; __left.reset(left); } exp->addExp(right); @@ -2405,8 +2438,7 @@ AbstractExpression* memberReferenceExpression() :{ { } { - __ONERROR(left); - return left; + return __left.move(); } } @@ -2416,16 +2448,21 @@ AbstractExpression* arrayReferenceExpression() : { Token* t = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { - left=functionCallExpression() + left=functionCallExpression() + { + __left.reset(left); + } (LOOKAHEAD(2) t="[" { if(exp == nullptr){ exp = new ArrayReferenceExpression(); exp->setExp(left); exp->setPosition(left); - left = exp; + left = exp; __left.reset(left); } } right=expression() @@ -2436,8 +2473,7 @@ AbstractExpression* arrayReferenceExpression() : { )* {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -2446,9 +2482,14 @@ AbstractExpression* functionCallExpression() : { FunctionCallExpression* exp = nullptr; Token* t = nullptr; AbstractExpression* left = nullptr; + + StackRelease __left; } { left=primitive() + { + __left.reset(left); + } [LOOKAHEAD(2) t="(" { @@ -2457,7 +2498,7 @@ AbstractExpression* functionCallExpression() : { exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } functionCallExpressionArg(exp) @@ -2468,8 +2509,7 @@ AbstractExpression* functionCallExpression() : { ] {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -2523,10 +2563,12 @@ AllocationExpression* allocationExpression() : { Token* t = nullptr; AbstractType* type = nullptr; + + StackRelease __exp; } { t="new" { - exp = new AllocationExpression(); + exp = new AllocationExpression(); __exp.reset(exp); exp->setPosition(t); } @@ -2549,15 +2591,14 @@ AllocationExpression* allocationExpression() : { ) ) - { - __ONERROR(exp); - return exp; + { + return __exp.move(); } } ConstructorArray* constructorArray(AbstractType* type) : { - ConstructorArray* exp = new ConstructorArray(); + ConstructorArray* exp = new ConstructorArray(); __STP(exp); Token* t = nullptr; AbstractExpression* dim = nullptr; @@ -2583,13 +2624,12 @@ ConstructorArray* constructorArray(AbstractType* type) : { } { - __ONERROR(exp); - return exp; + return __STP_MV(exp); } } ConstructorCall* constructorCallExpression(AbstractType* type) : { - ConstructorCall* exp = new ConstructorCall(); + ConstructorCall* exp = new ConstructorCall(); __STP(exp); Token* t = nullptr; exp->setName(type); @@ -2606,8 +2646,7 @@ ConstructorCall* constructorCallExpression(AbstractType* type) : { exp->setPosition(t); } { - __ONERROR(exp); - return exp; + return __STP_MV(exp); } } @@ -2636,7 +2675,7 @@ void constructorCallExpressionArg(ConstructorCall* exp) : { } ParenthesisExpression* parenthesisExpression() : { - ParenthesisExpression* exp = new ParenthesisExpression(); + ParenthesisExpression* exp = new ParenthesisExpression(); __STP(exp); AbstractExpression* e = nullptr; Token* t = nullptr; } @@ -2654,14 +2693,13 @@ ParenthesisExpression* parenthesisExpression() : { exp->setPosition(t); } { - __ONERROR(exp); - return exp; + return __STP_MV(exp); } } VariableIdentifier* variableIdentifier() : { - VariableIdentifier* valId = new VariableIdentifier(); + VariableIdentifier* valId = new VariableIdentifier(); __STP(valId); Token* t = nullptr; } { @@ -2669,8 +2707,7 @@ VariableIdentifier* variableIdentifier() : { valId->setName(_STR(t)); } { - __ONERROR(valId); - return valId; + return __STP_MV(valId); } } @@ -2712,7 +2749,7 @@ AbstractExpression* literal() : { NullLiteral* nullLiteral() : { - NullLiteral* lit = new NullLiteral(); + NullLiteral* lit = new NullLiteral(); __STP(lit); Token* t = nullptr; } { @@ -2720,13 +2757,12 @@ NullLiteral* nullLiteral() : lit->setPositions(t, t); } { - __ONERROR(lit); - return lit; + return __STP_MV(lit); } } NumberLiteral* numberLiteral() : { - NumberLiteral* lit = new NumberLiteral(); + NumberLiteral* lit = new NumberLiteral(); __STP(lit); Token* t = nullptr; } { @@ -2736,14 +2772,13 @@ NumberLiteral* numberLiteral() : { lit->setPositions(t, t); } { - __ONERROR(lit); - return lit; + return __STP_MV(lit); } } BooleanLiteral* booleanLiteral() : { - BooleanLiteral* lit = new BooleanLiteral(); + BooleanLiteral* lit = new BooleanLiteral(); __STP(lit); Token* t = nullptr; } { @@ -2760,14 +2795,13 @@ BooleanLiteral* booleanLiteral() : { lit->setPositions(t, t); } { - __ONERROR(lit); - return lit; + return __STP_MV(lit); } } LiteralExpression* literalExpression() : { - LiteralExpression* lit = new LiteralExpression(); + LiteralExpression* lit = new LiteralExpression(); __STP(lit); Token* t = nullptr; } { @@ -2783,8 +2817,7 @@ LiteralExpression* literalExpression() : lit->setPositions(t, t); } { - __ONERROR(lit); - return lit; + return __STP_MV(lit); } } @@ -2810,7 +2843,7 @@ AbstractSQLStatement* ddlStatement() : { } AlterTableStatement* alterTableStatement() : { - AlterTableStatement* stmt = new AlterTableStatement(); + AlterTableStatement* stmt = new AlterTableStatement(); __STP(stmt); TableIdentifier* tableId = nullptr; AbstractAlterDdlCommand* cmd = nullptr; Token* t = null; @@ -2838,8 +2871,7 @@ AlterTableStatement* alterTableStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } @@ -2857,7 +2889,6 @@ AbstractAlterDdlCommand* alterCommands() : { cmd=alterRenameCommands() ) { - __ONERROR(cmd); return cmd; } } @@ -2874,13 +2905,12 @@ AbstractAlterDdlCommand* alterRenameCommands() : { cmd=alterRenameTableCommand(t) ) { - __ONERROR(cmd); return cmd; } } AlterRenameTableCommand* alterRenameTableCommand(Token* t) : { - AlterRenameTableCommand* cmd = new AlterRenameTableCommand(); + AlterRenameTableCommand* cmd = new AlterRenameTableCommand(); __STP(cmd); cmd->setPosition(t); TableIdentifier* tableId = nullptr; @@ -2894,13 +2924,12 @@ AlterRenameTableCommand* alterRenameTableCommand(Token* t) : { cmd->setNewName(tableId); } { - __ONERROR(cmd); - return cmd; + return __STP_MV(cmd); } } AlterRenameColumnCommand* alterRenameColumnCommand(Token* t) : { - AlterRenameColumnCommand* cmd = new AlterRenameColumnCommand(); + AlterRenameColumnCommand* cmd = new AlterRenameColumnCommand(); __STP(cmd); cmd->setPosition(t); } { @@ -2919,13 +2948,12 @@ AlterRenameColumnCommand* alterRenameColumnCommand(Token* t) : { } { - __ONERROR(cmd); - return cmd; + return __STP_MV(cmd); } } AlterModifyCommand* alterModifyCommand() : { - AlterModifyCommand* cmd = new AlterModifyCommand(); + AlterModifyCommand* cmd = new AlterModifyCommand(); __STP(cmd); DdlColumnDescriptor* desc = nullptr; Token* t = nullptr; } @@ -2938,8 +2966,7 @@ AlterModifyCommand* alterModifyCommand() : { cmd->setColumnDescriptor(desc); } { - __ONERROR(cmd); - return cmd; + return __STP_MV(cmd); } } @@ -2957,13 +2984,12 @@ AbstractAlterDdlCommand* dropAlterCommands() : { cmd=alterDropPrimaryKeyCommand(t) ) { - __ONERROR(cmd); return cmd; } } AlterDropPrimaryKeyCommand* alterDropPrimaryKeyCommand(Token* t) : { - AlterDropPrimaryKeyCommand* cmd = new AlterDropPrimaryKeyCommand(); + AlterDropPrimaryKeyCommand* cmd = new AlterDropPrimaryKeyCommand(); __STP(cmd); cmd->setPosition(t); } { @@ -2974,13 +3000,12 @@ AlterDropPrimaryKeyCommand* alterDropPrimaryKeyCommand(Token* t) : { cmd->setPosition(t); } { - __ONERROR(cmd); - return cmd; + return __STP_MV(cmd); } } AlterDropIndexCommand* alterDropIndexCommand(Token* t) : { - AlterDropIndexCommand* cmd = new AlterDropIndexCommand(); + AlterDropIndexCommand* cmd = new AlterDropIndexCommand(); __STP(cmd); cmd->setPosition(t); } { @@ -2992,13 +3017,12 @@ AlterDropIndexCommand* alterDropIndexCommand(Token* t) : { cmd->setName(_STR(t)); } { - __ONERROR(cmd); - return cmd; + return __STP_MV(cmd); } } AlterDropColumnCommand* alterDropColumnCommand(Token* t) : { - AlterDropColumnCommand* cmd = new AlterDropColumnCommand(); + AlterDropColumnCommand* cmd = new AlterDropColumnCommand(); __STP(cmd); cmd->setPosition(t); } { @@ -3010,8 +3034,7 @@ AlterDropColumnCommand* alterDropColumnCommand(Token* t) : { cmd->setName(_STR(t)); } { - __ONERROR(cmd); - return cmd; + return __STP_MV(cmd); } } @@ -3029,13 +3052,12 @@ AbstractAlterDdlCommand* addAlterCommands() : { cmd=alterAddPrimaryKeyCommand(t) ) { - __ONERROR(cmd); return cmd; } } AlterAddPrimaryKeyCommand* alterAddPrimaryKeyCommand(Token* t) : { - AlterAddPrimaryKeyCommand* cmd = new AlterAddPrimaryKeyCommand(); + AlterAddPrimaryKeyCommand* cmd = new AlterAddPrimaryKeyCommand(); __STP(cmd); cmd->setPosition(t); } @@ -3071,13 +3093,12 @@ AlterAddPrimaryKeyCommand* alterAddPrimaryKeyCommand(Token* t) : { } { - __ONERROR(cmd); - return cmd; + return __STP_MV(cmd); } } AlterAddColumnCommand* alterAddColumnCommand(Token* __t) : { - AlterAddColumnCommand* cmd = new AlterAddColumnCommand(); + AlterAddColumnCommand* cmd = new AlterAddColumnCommand(); __STP(cmd); DdlColumnDescriptor* desc = nullptr; cmd->setPosition(__t); @@ -3094,13 +3115,12 @@ AlterAddColumnCommand* alterAddColumnCommand(Token* __t) : { } { - __ONERROR(cmd); - return cmd; + return __STP_MV(cmd); } } AlterAddIndexCommand* alterAddIndexCommand(Token* t) : { - AlterAddIndexCommand* cmd = new AlterAddIndexCommand(); + AlterAddIndexCommand* cmd = new AlterAddIndexCommand(); __STP(cmd); cmd->setPosition(t); } { @@ -3142,14 +3162,13 @@ AlterAddIndexCommand* alterAddIndexCommand(Token* t) : { } { - __ONERROR(cmd); - return cmd; + return __STP_MV(cmd); } } CreateTableStatement* createTableStatement() : { - CreateTableStatement* stmt = new CreateTableStatement(); + CreateTableStatement* stmt = new CreateTableStatement(); __STP(stmt); DdlColumnDescriptor* desc = nullptr; Token* t = null; } @@ -3223,14 +3242,13 @@ CreateTableStatement* createTableStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } DdlColumnDescriptor* ddlColumnDescriptor() : { - DdlColumnDescriptor* desc = new DdlColumnDescriptor(); + DdlColumnDescriptor* desc = new DdlColumnDescriptor(); __STP(desc); ColumnTypeDescriptor* typeDesc = nullptr; AbstractSQLExpression* val = nullptr; Token* t = nullptr; @@ -3269,14 +3287,13 @@ DdlColumnDescriptor* ddlColumnDescriptor() : } ] { - __ONERROR(desc); - return desc; + return __STP_MV(desc); } } ColumnTypeDescriptor* columnTypeDescriptor() : { - ColumnTypeDescriptor* typeDesc = new ColumnTypeDescriptor(); + ColumnTypeDescriptor* typeDesc = new ColumnTypeDescriptor(); __STP(typeDesc); AbstractSQLExpression* val = nullptr; Token* t1 = nullptr; Token* t2 = nullptr; @@ -3301,13 +3318,12 @@ ColumnTypeDescriptor* columnTypeDescriptor() : } ] { - __ONERROR(typeDesc); - return typeDesc; + return __STP_MV(typeDesc); } } DropTableStatement* dropTableStatement() : { - DropTableStatement* stmt = new DropTableStatement(); + DropTableStatement* stmt = new DropTableStatement(); __STP(stmt); Token* t = null; TableIdentifier* tableId = nullptr; } @@ -3328,8 +3344,7 @@ DropTableStatement* dropTableStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } @@ -3357,7 +3372,7 @@ AbstractSQLStatement* sqlDmlStatement() : { } SelectStatement* selectStatement() : { - SelectStatement* stmt = new SelectStatement(); + SelectStatement* stmt = new SelectStatement(); __STP(stmt); Token* t = nullptr; SQLSelectTargetList* expList = nullptr; SQLFrom* from = nullptr; @@ -3414,13 +3429,12 @@ SelectStatement* selectStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } SQLSelectTargetList* sqlSelectTargetList() : { - SQLSelectTargetList* stmt = new SQLSelectTargetList(); + SQLSelectTargetList* stmt = new SQLSelectTargetList(); __STP(stmt); Token* t = nullptr; SQLSelectTarget* target = nullptr; } @@ -3440,13 +3454,12 @@ SQLSelectTargetList* sqlSelectTargetList() : { )* {} { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } SQLSelectTarget* sqlSelectTarget() : { - SQLSelectTarget* stmt = new SQLSelectTarget(); + SQLSelectTarget* stmt = new SQLSelectTarget(); __STP(stmt); Token* t = nullptr; AbstractSQLExpression* exp = nullptr; } @@ -3470,13 +3483,12 @@ SQLSelectTarget* sqlSelectTarget() : { ) {} { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } SQLGroupBy* sqlGroupBy() : { - SQLGroupBy* stmt = new SQLGroupBy(); + SQLGroupBy* stmt = new SQLGroupBy(); __STP(stmt); Token* t = nullptr; SQLColumnsList* columns = nullptr; SQLHaving* having = nullptr; @@ -3501,8 +3513,7 @@ SQLGroupBy* sqlGroupBy() : { ] {} { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } @@ -3526,7 +3537,7 @@ SQLHaving* sqlHaving() : { } SQLOrderBy* sqlOrderBy() : { - SQLOrderBy* stmt = new SQLOrderBy(); + SQLOrderBy* stmt = new SQLOrderBy(); __STP(stmt); Token* t = nullptr; SQLColumnsList* columns = nullptr; } @@ -3542,13 +3553,12 @@ SQLOrderBy* sqlOrderBy() : { stmt->setPosition(columns); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } SQLLimitOffset* sqlLimitOffset() : { - SQLLimitOffset* stmt = new SQLLimitOffset(); + SQLLimitOffset* stmt = new SQLLimitOffset(); __STP(stmt); Token* t = nullptr; AbstractSQLExpression* exp = nullptr; } @@ -3573,13 +3583,12 @@ SQLLimitOffset* sqlLimitOffset() : { ] {} { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } UpdateStatement* updateStatement() : { - UpdateStatement* stmt = new UpdateStatement(); + UpdateStatement* stmt = new UpdateStatement(); __STP(stmt); Token* t = nullptr; TableIdentifier* tableId = nullptr; SQLSet* set = nullptr; @@ -3608,13 +3617,12 @@ UpdateStatement* updateStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } SQLSet* sqlSet() : { - SQLSet* stmt = new SQLSet(); + SQLSet* stmt = new SQLSet(); __STP(stmt); Token* t = nullptr; SQLSetPair* pair = nullptr; } @@ -3637,13 +3645,12 @@ SQLSet* sqlSet() : { )* {} { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } SQLSetPair* sqlSetPair() : { - SQLSetPair* stmt = new SQLSetPair(); + SQLSetPair* stmt = new SQLSetPair(); __STP(stmt); Token* t = nullptr; SQLColumnIdentifier* colId = nullptr; AbstractSQLExpression* ex = nullptr; @@ -3663,13 +3670,12 @@ SQLSetPair* sqlSetPair() : { stmt->setPosition(ex); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } InsertStatement* insertStatement() : { - InsertStatement* stmt = new InsertStatement(); + InsertStatement* stmt = new InsertStatement(); __STP(stmt); Token* t = nullptr; TableIdentifier* tableId = nullptr; SQLColumnsList* columns = nullptr; @@ -3721,13 +3727,12 @@ InsertStatement* insertStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } SQLColumnsList* sqlColumnsList() : { - SQLColumnsList* stmt = new SQLColumnsList(); + SQLColumnsList* stmt = new SQLColumnsList(); __STP(stmt); Token* t = nullptr; SQLColumnIdentifier* colId = nullptr; } @@ -3747,13 +3752,12 @@ SQLColumnsList* sqlColumnsList() : { )* {} { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } DeleteStatement* deleteStatement() : { - DeleteStatement* stmt = new DeleteStatement(); + DeleteStatement* stmt = new DeleteStatement(); __STP(stmt); Token* t = nullptr; SQLFrom* from = nullptr; SQLWhere* where = nullptr; @@ -3777,13 +3781,12 @@ DeleteStatement* deleteStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } SQLWhere* sqlWhere() : { - SQLWhere* stmt = new SQLWhere(); + SQLWhere* stmt = new SQLWhere(); __STP(stmt); Token* t = nullptr; AbstractSQLExpression* exp = nullptr; } @@ -3796,13 +3799,12 @@ SQLWhere* sqlWhere() : { stmt->setPosition(exp); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } SQLFrom* sqlFrom() : { - SQLFrom* stmt = new SQLFrom(); + SQLFrom* stmt = new SQLFrom(); __STP(stmt); Token* t = nullptr; AbstractJoinPart* tableId = nullptr; } @@ -3815,13 +3817,12 @@ SQLFrom* sqlFrom() : { stmt->setPosition(tableId); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } BeginStatement* beginStatement() : { - BeginStatement* stmt = new BeginStatement(); + BeginStatement* stmt = new BeginStatement(); __STP(stmt); Token* t = null; } { @@ -3833,13 +3834,12 @@ BeginStatement* beginStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } CommitStatement* commitStatement() : { - CommitStatement* stmt = new CommitStatement(); + CommitStatement* stmt = new CommitStatement(); __STP(stmt); Token* t = null; } { @@ -3850,13 +3850,12 @@ CommitStatement* commitStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } RollbackStatement* rollbackStatement() : { - RollbackStatement* stmt = new RollbackStatement(); + RollbackStatement* stmt = new RollbackStatement(); __STP(stmt); Token* t = null; } { @@ -3867,8 +3866,7 @@ RollbackStatement* rollbackStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } @@ -3894,16 +3892,21 @@ AbstractSQLExpression* sqlOrExpression() : { Token* t = nullptr; AbstractSQLExpression* left = nullptr; AbstractSQLExpression* right = nullptr; + + StackRelease __left; } { left=sqlAndExpression() + { + __left.reset(left); + } (LOOKAHEAD(2) t= { if(exp == nullptr){ exp = new SQLOrExpression(); exp->addOperand(left); exp->setPosition(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -3915,8 +3918,7 @@ AbstractSQLExpression* sqlOrExpression() : { )* {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -3925,16 +3927,21 @@ AbstractSQLExpression* sqlAndExpression() : { Token* t = nullptr; AbstractSQLExpression* left = nullptr; AbstractSQLExpression* right = nullptr; + + StackRelease __left; } { left=sqlNotExpression() + { + __left.reset(left); + } (LOOKAHEAD(2) t= { if(exp == nullptr){ exp = new SQLAndExpression(); exp->addOperand(left); exp->setPosition(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -3946,8 +3953,7 @@ AbstractSQLExpression* sqlAndExpression() : { )* {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -3956,18 +3962,20 @@ AbstractSQLExpression* sqlNotExpression() : { Token* t = nullptr; AbstractSQLExpression* left = nullptr; AbstractSQLExpression* right = nullptr; + + StackRelease __left; } { [ t= { exp = new SQLNotExpression(); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } ] right=sqlLikeExpression() { if(left == nullptr){ - left = right; + left = right; __left.reset(left); } else{ exp->setExpression(right); @@ -3976,8 +3984,7 @@ AbstractSQLExpression* sqlNotExpression() : { } { - __ONERROR(left); - return left; + return __left.move(); } } @@ -3986,9 +3993,14 @@ AbstractSQLExpression* sqlLikeExpression() : { Token* t = nullptr; AbstractSQLExpression* left = nullptr; SQLLiteral* right = nullptr; + + StackRelease __left; } { left=sqlIsNullExpression() + { + __left.reset(left); + } [LOOKAHEAD(2) t= { exp = new SQLLikeExpression(); @@ -3996,7 +4008,7 @@ AbstractSQLExpression* sqlLikeExpression() : { exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } right=sqlLiteral() { @@ -4016,8 +4028,7 @@ AbstractSQLExpression* sqlLikeExpression() : { ] {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -4026,9 +4037,14 @@ AbstractSQLExpression* sqlIsNullExpression() : { Token* t = nullptr; AbstractSQLExpression* left = nullptr; AbstractSQLExpression* right = nullptr; + + StackRelease __left; } { left=sqlBetweenExpression() + { + __left.reset(left); + } [LOOKAHEAD(2) t= { exp = new SQLIsNullExpression(); @@ -4036,7 +4052,7 @@ AbstractSQLExpression* sqlIsNullExpression() : { exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } [ @@ -4052,8 +4068,7 @@ AbstractSQLExpression* sqlIsNullExpression() : { ] {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -4062,9 +4077,14 @@ AbstractSQLExpression* sqlBetweenExpression() : { Token* t = nullptr; AbstractSQLExpression* left = nullptr; AbstractSQLExpression* right = nullptr; + + StackRelease __left; } { left=sqlInExpression() + { + __left.reset(left); + } [ t= { exp = new SQLBetweenExpression(); @@ -4072,7 +4092,7 @@ AbstractSQLExpression* sqlBetweenExpression() : { exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } right=sqlAdditiveExpression() { @@ -4091,8 +4111,7 @@ AbstractSQLExpression* sqlBetweenExpression() : { ] {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -4101,10 +4120,15 @@ AbstractSQLExpression* sqlInExpression() : { Token* t = nullptr; AbstractSQLExpression* left = nullptr; SQLExpressionList* list = nullptr; + + StackRelease __left; } { left=sqlRelationalExpression() + { + __left.reset(left); + } [ t= { exp = new SQLInExpression(); @@ -4112,7 +4136,7 @@ AbstractSQLExpression* sqlInExpression() : { exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } t="(" { exp->setPosition(t); @@ -4128,8 +4152,7 @@ AbstractSQLExpression* sqlInExpression() : { ] {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -4138,9 +4161,14 @@ AbstractSQLExpression* sqlRelationalExpression() : { Token* t = nullptr; AbstractSQLExpression* left = nullptr; AbstractSQLExpression* right = nullptr; + + StackRelease __left; } { left=sqlEqualityExpression() + { + __left.reset(left); + } [ ( t="<" { @@ -4150,7 +4178,7 @@ AbstractSQLExpression* sqlRelationalExpression() : { exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } | t=">" { @@ -4160,7 +4188,7 @@ AbstractSQLExpression* sqlRelationalExpression() : { exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } | t="<=" { @@ -4170,7 +4198,7 @@ AbstractSQLExpression* sqlRelationalExpression() : { exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } | t=">=" { @@ -4180,7 +4208,7 @@ AbstractSQLExpression* sqlRelationalExpression() : { exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } ) right=sqlEqualityExpression() { @@ -4190,8 +4218,7 @@ AbstractSQLExpression* sqlRelationalExpression() : { ] {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -4200,9 +4227,14 @@ AbstractSQLExpression* sqlEqualityExpression() : { Token* t = nullptr; AbstractSQLExpression* left = nullptr; AbstractSQLExpression* right = nullptr; + + StackRelease __left; } { left=sqlAdditiveExpression() + { + __left.reset(left); + } [ ( t="=" { @@ -4212,7 +4244,7 @@ AbstractSQLExpression* sqlEqualityExpression() : { exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } | t="<>" { @@ -4222,7 +4254,7 @@ AbstractSQLExpression* sqlEqualityExpression() : { exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } | t="!=" { @@ -4232,7 +4264,7 @@ AbstractSQLExpression* sqlEqualityExpression() : { exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } ) right=sqlAdditiveExpression() { @@ -4242,8 +4274,7 @@ AbstractSQLExpression* sqlEqualityExpression() : { ] {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -4252,9 +4283,14 @@ AbstractSQLExpression* sqlAdditiveExpression() : { Token* t = nullptr; AbstractSQLExpression* left = nullptr; AbstractSQLExpression* right = nullptr; + + StackRelease __left; } { left=sqlMultiplicativeExpression() + { + __left.reset(left); + } ( ( t="+" { @@ -4262,7 +4298,7 @@ AbstractSQLExpression* sqlAdditiveExpression() : { exp = new SQLAdditiveExpression(); exp->addOperand(left); exp->setPosition(left); - left = exp; + left = exp; __left.reset(left); } exp->addOpe(SQLAdditiveExpression::ADD); exp->setPosition(t); @@ -4273,7 +4309,7 @@ AbstractSQLExpression* sqlAdditiveExpression() : { exp = new SQLAdditiveExpression(); exp->addOperand(left); exp->setPosition(left); - left = exp; + left = exp; __left.reset(left); } exp->addOpe(SQLAdditiveExpression::SUB); exp->setPosition(t); @@ -4286,8 +4322,7 @@ AbstractSQLExpression* sqlAdditiveExpression() : { )* {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -4296,9 +4331,14 @@ AbstractSQLExpression* sqlMultiplicativeExpression() : { Token* t = nullptr; AbstractSQLExpression* left = nullptr; AbstractSQLExpression* right = nullptr; + + StackRelease __left; } { left=sqlPrimitiveExpression() + { + __left.reset(left); + } ( ( t="*" { @@ -4306,7 +4346,7 @@ AbstractSQLExpression* sqlMultiplicativeExpression() : { exp = new SqlMultiplicativeExpression(); exp->addOperand(left); exp->setPosition(left); - left = exp; + left = exp; __left.reset(left); } exp->addOpe(SqlMultiplicativeExpression::MUL); exp->setPosition(t); @@ -4317,7 +4357,7 @@ AbstractSQLExpression* sqlMultiplicativeExpression() : { exp = new SqlMultiplicativeExpression(); exp->addOperand(left); exp->setPosition(left); - left = exp; + left = exp; __left.reset(left); } exp->addOpe(SqlMultiplicativeExpression::DIV); exp->setPosition(t); @@ -4328,7 +4368,7 @@ AbstractSQLExpression* sqlMultiplicativeExpression() : { exp = new SqlMultiplicativeExpression(); exp->addOperand(left); exp->setPosition(left); - left = exp; + left = exp; __left.reset(left); } exp->addOpe(SqlMultiplicativeExpression::MOD); exp->setPosition(t); @@ -4341,8 +4381,7 @@ AbstractSQLExpression* sqlMultiplicativeExpression() : { )* {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -4367,7 +4406,7 @@ AbstractSQLExpression* sqlPrimitiveExpression() : { } SQLNullLiteral* sqlNullLiteral() : { - SQLNullLiteral* exp = new SQLNullLiteral(); + SQLNullLiteral* exp = new SQLNullLiteral(); __STP(exp); Token* t = nullptr; } { @@ -4375,13 +4414,12 @@ SQLNullLiteral* sqlNullLiteral() : { exp->setPosition(t); } { - __ONERROR(exp); - return exp; + return __STP_MV(exp); } } SQLWildCard* sqlWildCard() : { - SQLWildCard* exp = new SQLWildCard(); + SQLWildCard* exp = new SQLWildCard(); __STP(exp); Token* t = nullptr; } { @@ -4389,13 +4427,12 @@ SQLWildCard* sqlWildCard() : { exp->setPosition(t); } { - __ONERROR(exp); - return exp; + return __STP_MV(exp); } } SQLFunctionCall* sqlFunctionCall() : { - SQLFunctionCall* exp = new SQLFunctionCall(); + SQLFunctionCall* exp = new SQLFunctionCall(); __STP(exp); Token* t = nullptr; VariableIdentifier* name = nullptr; } @@ -4415,8 +4452,7 @@ SQLFunctionCall* sqlFunctionCall() : { } { - __ONERROR(exp); - return exp; + return __STP_MV(exp); } } @@ -4446,13 +4482,17 @@ void sqlFunctionCallArguments(SQLFunctionCall* exp) : { AbstractSQLExpression* sqlDistinctArgument() : { SQLDistinctArgument* dist = nullptr; + StackRelease __dist; + AbstractSQLExpression* ex = nullptr; + StackRelease __ex; + Token* t = nullptr; } { [LOOKAHEAD(2) t= { - dist = new SQLDistinctArgument(); + dist = new SQLDistinctArgument(); __dist.reset(dist); dist->setPosition(t); } ] @@ -4460,17 +4500,20 @@ AbstractSQLExpression* sqlDistinctArgument() : { if(t != nullptr){ dist->setPosition(ex); dist->setExpression(ex); - ex = dist; + ex = __dist.move(); __ex.reset(ex); + } + else{ + __ex.reset(ex); } } { - return ex; + return __ex.move(); } } SQLPlaceHolder* sqlPlaceHolder() : { - SQLPlaceHolder* exp = new SQLPlaceHolder(); + SQLPlaceHolder* exp = new SQLPlaceHolder(); __STP(exp); Token* t = nullptr; AbstractExpression* ex = nullptr; } @@ -4499,14 +4542,13 @@ SQLPlaceHolder* sqlPlaceHolder() : { exp->setPosition(t); } { - __ONERROR(exp); - return exp; + return __STP_MV(exp); } } SQLParenthesisExpression* sqlParenthesisExpression() : { - SQLParenthesisExpression* exp = new SQLParenthesisExpression(); + SQLParenthesisExpression* exp = new SQLParenthesisExpression(); __STP(exp); Token* t = nullptr; AbstractSQLExpression* ex = nullptr; } @@ -4524,13 +4566,12 @@ SQLParenthesisExpression* sqlParenthesisExpression() : { exp->setPosition(t); } { - __ONERROR(exp); - return exp; + return __STP_MV(exp); } } SQLLiteral* sqlLiteral() : { - SQLLiteral* exp = new SQLLiteral(); + SQLLiteral* exp = new SQLLiteral(); __STP(exp); Token* t = nullptr; } { @@ -4552,13 +4593,12 @@ SQLLiteral* sqlLiteral() : { ) {} { - __ONERROR(exp); - return exp; + return __STP_MV(exp); } } SQLBooleanLiteral* sqlBooleanLiteral() : { - SQLBooleanLiteral* exp = new SQLBooleanLiteral(); + SQLBooleanLiteral* exp = new SQLBooleanLiteral(); __STP(exp); Token* t = nullptr; } { @@ -4575,13 +4615,12 @@ SQLBooleanLiteral* sqlBooleanLiteral() : { ) {} { - __ONERROR(exp); - return exp; + return __STP_MV(exp); } } SQLColumnIdentifier* sqlColumnIdentifier() : { - SQLColumnIdentifier* exp = new SQLColumnIdentifier(); + SQLColumnIdentifier* exp = new SQLColumnIdentifier(); __STP(exp); Token* t = nullptr; Token* t1 = nullptr; Token* t2 = nullptr; @@ -4622,8 +4661,7 @@ SQLColumnIdentifier* sqlColumnIdentifier() : { } } { - __ONERROR(exp); - return exp; + return __STP_MV(exp); } } @@ -4652,7 +4690,7 @@ Token* sqlIdentifierName() : { */ SQLExpressionList* sqlExpressionList() : { - SQLExpressionList* exp = new SQLExpressionList(); + SQLExpressionList* exp = new SQLExpressionList(); __STP(exp); Token* t = nullptr; AbstractSQLExpression* ex = nullptr; } @@ -4673,8 +4711,7 @@ SQLExpressionList* sqlExpressionList() : { )* {} { - __ONERROR(exp); - return exp; + return __STP_MV(exp); } } @@ -4688,9 +4725,14 @@ AbstractJoinPart* tableList() : { TableList* tablelist = nullptr; Token* t = nullptr; TableIdentifier* table = nullptr; + + StackRelease __left; } { left=join() + { + __left.reset(left); + } ( t="," { if(tablelist == nullptr){ @@ -4698,7 +4740,7 @@ AbstractJoinPart* tableList() : { tablelist->addTable(left); tablelist->setPosition(left); - left = tablelist; + left = tablelist; __left.reset(left); } tablelist->setPosition(t); @@ -4711,8 +4753,7 @@ AbstractJoinPart* tableList() : { )* {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -4721,9 +4762,13 @@ AbstractJoinPart* join() : { SQLJoinPart* right = nullptr; SQLJoin* joinBody = nullptr; + StackRelease __left; } { left=joinTarget() + { + __left.reset(left); + } ( ( right=leftJoin() @@ -4740,7 +4785,7 @@ AbstractJoinPart* join() : { joinBody->setPosition(left); joinBody->setFirst(left); - left = joinBody; + left = joinBody; __left.reset(left); } joinBody->addJoinPart(right); @@ -4748,13 +4793,12 @@ AbstractJoinPart* join() : { )* { - __ONERROR(left); - return left; + return __left.move(); } } SQLJoinPart* innerJoin() : { - SQLJoinPart* join = new SQLJoinPart(); + SQLJoinPart* join = new SQLJoinPart(); __STP(join); join->setJoinType(SQLJoinPart::INNER_JOIN); Token* t = nullptr; AbstractSQLExpression* exp = nullptr; @@ -4783,14 +4827,13 @@ SQLJoinPart* innerJoin() : { ] {} { - __ONERROR(join); - return join; + return __STP_MV(join); } } SQLJoinPart* leftJoin() : { - SQLJoinPart* join = new SQLJoinPart(); + SQLJoinPart* join = new SQLJoinPart(); __STP(join); join->setJoinType(SQLJoinPart::LEFT_OUTER_JOIN); Token* t = nullptr; AbstractSQLExpression* exp = nullptr; @@ -4823,13 +4866,12 @@ SQLJoinPart* leftJoin() : { ] {} { - __ONERROR(join); - return join; + return __STP_MV(join); } } SQLJoinPart* rightJoin() : { - SQLJoinPart* join = new SQLJoinPart(); + SQLJoinPart* join = new SQLJoinPart(); __STP(join); join->setJoinType(SQLJoinPart::RIGHT_OUTER_JOIN); Token* t = nullptr; AbstractSQLExpression* exp = nullptr; @@ -4862,13 +4904,12 @@ SQLJoinPart* rightJoin() : { ] {} { - __ONERROR(join); - return join; + return __STP_MV(join); } } SQLJoinPart* crossJoin() : { - SQLJoinPart* join = new SQLJoinPart(); + SQLJoinPart* join = new SQLJoinPart(); __STP(join); join->setJoinType(SQLJoinPart::CROSS_JOIN); Token* t = nullptr; AbstractSQLExpression* exp = nullptr; @@ -4897,8 +4938,7 @@ SQLJoinPart* crossJoin() : { {} { - __ONERROR(join); - return join; + return __STP_MV(join); } } @@ -4919,7 +4959,7 @@ AbstractJoinPart* joinTarget() : { } ParenthesisJoinPart* parenthesisJoinPart() : { - ParenthesisJoinPart* part = new ParenthesisJoinPart(); + ParenthesisJoinPart* part = new ParenthesisJoinPart(); __STP(part); Token* t = nullptr; AbstractJoinPart* target = nullptr; } @@ -4937,13 +4977,12 @@ ParenthesisJoinPart* parenthesisJoinPart() : { part->setPosition(t); } { - __ONERROR(part); - return part; + return __STP_MV(part); } } TableIdentifier* tableIdentifier() : { - TableIdentifier* exp = new TableIdentifier(); + TableIdentifier* exp = new TableIdentifier(); __STP(exp); Token* t = nullptr; Token* t1 = nullptr; Token* t2 = nullptr; @@ -4980,8 +5019,7 @@ TableIdentifier* tableIdentifier() : { ] { - __ONERROR(exp); - return exp; + return __STP_MV(exp); } } @@ -5002,14 +5040,13 @@ AbstractJsonExpression* jsonElement() : { ) { - __ONERROR(jsonExp); return jsonExp; } } JsonInitializerExpression* jsonInitializerExpression() : { - JsonInitializerExpression* jsonExp = new JsonInitializerExpression(); + JsonInitializerExpression* jsonExp = new JsonInitializerExpression(); __STP(jsonExp); Token* t = nullptr; JsonKeyValuePairExpression* element = nullptr; } @@ -5037,14 +5074,13 @@ JsonInitializerExpression* jsonInitializerExpression() : jsonExp->setPosition(t); } { - __ONERROR(jsonExp); - return jsonExp; + return __STP_MV(jsonExp); } } JsonArrayExpression* jsonArrayExpression() : { - JsonArrayExpression* jsonExp = new JsonArrayExpression(); + JsonArrayExpression* jsonExp = new JsonArrayExpression(); __STP(jsonExp); AbstractJsonExpression* element = nullptr; Token* t = nullptr; @@ -5075,14 +5111,13 @@ JsonArrayExpression* jsonArrayExpression() : jsonExp->setPosition(t); } { - __ONERROR(jsonExp); - return jsonExp; + return __STP_MV(jsonExp); } } JsonKeyValuePairExpression* jsonKeyValuePair() : { - JsonKeyValuePairExpression* pair = new JsonKeyValuePairExpression(); + JsonKeyValuePairExpression* pair = new JsonKeyValuePairExpression(); __STP(pair); Token* t = nullptr; AbstractExpression* exp = nullptr; LiteralExpression* lit = nullptr; @@ -5115,7 +5150,6 @@ JsonKeyValuePairExpression* jsonKeyValuePair() : } ) { - __ONERROR(pair); - return pair; + return __STP_MV(pair); } } diff --git a/src_smartcontract/engine/jj/base.jj b/src_smartcontract/engine/jj/base.jj index 40ad762..bb0637f 100644 --- a/src_smartcontract/engine/jj/base.jj +++ b/src_smartcontract/engine/jj/base.jj @@ -5,7 +5,7 @@ CompilationUnit* compilationUnit() : { - CompilationUnit* unit = new CompilationUnit(); + CompilationUnit* unit = new CompilationUnit(); __STP(unit); PackageDeclare* pkg = nullptr; ImportsDeclare* imports = nullptr; ClassDeclare* clazz = nullptr; @@ -29,12 +29,12 @@ CompilationUnit* compilationUnit() : )+ { - return unit; + return __STP_MV(unit); } } ImportsDeclare* importsDeclare() : { - ImportsDeclare* importsDeclare = new ImportsDeclare(); + ImportsDeclare* importsDeclare = new ImportsDeclare(); __STP(importsDeclare); ImportDeclare* dec = nullptr; } { @@ -48,12 +48,12 @@ ImportsDeclare* importsDeclare() : { } { __ONERROR(importsDeclare); - return importsDeclare; + return __STP_MV(importsDeclare); } } ImportDeclare* importDeclare() : { - ImportDeclare* dec = new ImportDeclare(); + ImportDeclare* dec = new ImportDeclare(); __STP(dec); Token* t = nullptr; } { @@ -80,19 +80,19 @@ ImportDeclare* importDeclare() : { dec->setPosition(t); } { - __ONERROR(dec); - return dec; + return __STP_MV(dec); } } PackageDeclare* packageDeclare() : { PackageDeclare* pkg = nullptr; + StackRelease __pkg; PackageNameDeclare* name = nullptr; Token* t = nullptr; } { t="package" { - pkg=new PackageDeclare(); + pkg=new PackageDeclare(); __pkg.reset(pkg); pkg->setPosition(t); } @@ -105,19 +105,19 @@ PackageDeclare* packageDeclare() : { pkg->setPosition(t); } { - __ONERROR(pkg); - return pkg; + return __pkg.move(); } } PackageNameDeclare* packageNameDeclare() : { PackageNameDeclare* names = nullptr; + StackRelease __names; Token* t = nullptr; } { t=< IDENTIFIER > { - names = new PackageNameDeclare(); + names = new PackageNameDeclare(); __names.reset(names); names->addSegment(_STR(t)); names->setPosition(t); } @@ -131,8 +131,7 @@ PackageNameDeclare* packageNameDeclare() : { } { - __ONERROR(names); - return names; + return __names.move(); } } @@ -140,6 +139,8 @@ PackageNameDeclare* packageNameDeclare() : ClassDeclare* classDeclare() : { ClassDeclare* clazz = nullptr; + StackRelease __clazz; + GenericsClassDeclare* gclazz = nullptr; GenericsParameter* param = nullptr; Token* cls = nullptr; @@ -153,7 +154,7 @@ ClassDeclare* classDeclare() : { ( cls="class" { - clazz = new ClassDeclare(); + clazz = new ClassDeclare(); __clazz.reset(clazz); } | cls="interface" { @@ -239,14 +240,13 @@ ClassDeclare* classDeclare() : clazz->setBlock(block); } { - __ONERROR(clazz); - return clazz; + return __clazz.move(); } } ClassExtends* classExtends() : { - ClassExtends* extends = new ClassExtends(); + ClassExtends* extends = new ClassExtends(); __STP(extends); ClassName* name = nullptr; Token* t = nullptr; } @@ -259,13 +259,12 @@ ClassExtends* classExtends() : extends->setClassName(name); } { - __ONERROR(extends); - return extends; + return __STP_MV(extends); } } ClassImplements* classImplements() :{ - ClassImplements* implements = new ClassImplements(); + ClassImplements* implements = new ClassImplements(); __STP(implements); ClassName* name = nullptr; Token* t = nullptr; } @@ -289,14 +288,13 @@ ClassImplements* classImplements() :{ {} { - __ONERROR(implements); - return implements; + return __STP_MV(implements); } } ClassName* className() : { - ClassName* name = new ClassName(); + ClassName* name = new ClassName(); __STP(name); Token* t = nullptr; } { @@ -316,14 +314,14 @@ ClassName* className() : )* {} { - __ONERROR(name); - return name; + return __STP_MV(name); } } ClassDeclareBlock* classDeclareBlock() : { ClassDeclareBlock* block = nullptr; + StackRelease __block; Token* begin, *end; MethodDeclare* method = nullptr; @@ -336,7 +334,7 @@ ClassDeclareBlock* classDeclareBlock() : } { begin="{" { - block = new ClassDeclareBlock(); + block = new ClassDeclareBlock(); __block.reset(block); block->setPosition(begin); } @@ -386,13 +384,12 @@ ClassDeclareBlock* classDeclareBlock() : block->setPosition(end); } { - __ONERROR(block); - return block; + return __block.move(); } } MethodDeclare* methodDeclare(AccessControlDeclare* ctrl, bool _static, AbstractType* type, Token* identifier) : { - MethodDeclare* method = new MethodDeclare(); + MethodDeclare* method = new MethodDeclare(); __STP(method); method->setPosition(ctrl); @@ -424,13 +421,12 @@ MethodDeclare* methodDeclare(AccessControlDeclare* ctrl, bool _static, AbstractT { } { - __ONERROR(method); - return method; + return __STP_MV(method); } } MemberVariableDeclare* memberVariableDeclare(AccessControlDeclare* ctrl, bool _static, AbstractType* type, Token* identifier) : { - MemberVariableDeclare* variable = new MemberVariableDeclare(); + MemberVariableDeclare* variable = new MemberVariableDeclare(); __STP(variable); Token* t = nullptr; variable->setPosition(ctrl); @@ -458,14 +454,13 @@ MemberVariableDeclare* memberVariableDeclare(AccessControlDeclare* ctrl, bool _s } { - __ONERROR(variable); - return variable; + return __STP_MV(variable); } } AccessControlDeclare* accessControlDeclare() : { Token* t = nullptr; - AccessControlDeclare* ctrl = new AccessControlDeclare(); + AccessControlDeclare* ctrl = new AccessControlDeclare(); __STP(ctrl); } { ( @@ -485,13 +480,12 @@ AccessControlDeclare* accessControlDeclare() : { } ) { - __ONERROR(ctrl); - return ctrl; + return __STP_MV(ctrl); } } ArgumentsListDeclare* argumentsListDeclare() : { - ArgumentsListDeclare* arguments = new ArgumentsListDeclare(); + ArgumentsListDeclare* arguments = new ArgumentsListDeclare(); __STP(arguments); Token* t = nullptr; ArgumentDeclare* arg = nullptr; } @@ -516,14 +510,13 @@ ArgumentsListDeclare* argumentsListDeclare() : { arguments->setPosition(t); } { - __ONERROR(arguments); - return arguments; + return __STP_MV(arguments); } } ArgumentDeclare* argumentDeclare() : { - ArgumentDeclare* arg = new ArgumentDeclare(); + ArgumentDeclare* arg = new ArgumentDeclare(); __STP(arg); AbstractType* type = nullptr; Token* t = nullptr; } @@ -539,8 +532,7 @@ ArgumentDeclare* argumentDeclare() : { } { - __ONERROR(arg); - return arg; + return __STP_MV(arg); } } diff --git a/src_smartcontract/engine/jj/expression.jj b/src_smartcontract/engine/jj/expression.jj index 8556175..cd6ce4c 100644 --- a/src_smartcontract/engine/jj/expression.jj +++ b/src_smartcontract/engine/jj/expression.jj @@ -22,9 +22,15 @@ AbstractExpression* conditionalOrExpression() : { ConditionalOrExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { left=conditionalAndExpression() + { + __left.reset(left); + } + ( t="||" { @@ -32,7 +38,7 @@ AbstractExpression* conditionalOrExpression() : { exp = new ConditionalOrExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(exp); } exp->setPosition(t); @@ -45,8 +51,7 @@ AbstractExpression* conditionalOrExpression() : { )* {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -55,9 +60,14 @@ AbstractExpression* conditionalAndExpression() : { ConditionalAndExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { left=orExpression() + { + __left.reset(left); + } ( t="&&" { @@ -65,7 +75,7 @@ AbstractExpression* conditionalAndExpression() : { exp = new ConditionalAndExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -78,8 +88,7 @@ AbstractExpression* conditionalAndExpression() : { )* {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -88,9 +97,14 @@ AbstractExpression* orExpression() : { OrExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { left=exclusiveOrExpression() + { + __left.reset(left); + } ( t="|" { @@ -98,7 +112,7 @@ AbstractExpression* orExpression() : { exp = new OrExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -111,8 +125,7 @@ AbstractExpression* orExpression() : { )* {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -121,9 +134,14 @@ AbstractExpression* exclusiveOrExpression() : { ExclusiveOrExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { left=andExpression() + { + __left.reset(left); + } ( t="^" { @@ -131,7 +149,7 @@ AbstractExpression* exclusiveOrExpression() : { exp = new ExclusiveOrExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -144,8 +162,7 @@ AbstractExpression* exclusiveOrExpression() : { )* {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -154,9 +171,14 @@ AbstractExpression* andExpression() : { AndExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { left=equalityExpression() + { + __left.reset(left); + } ( t="&" { @@ -164,7 +186,7 @@ AbstractExpression* andExpression() : { exp = new AndExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -177,8 +199,7 @@ AbstractExpression* andExpression() : { )* {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -187,9 +208,14 @@ AbstractExpression* equalityExpression() : { EqualityExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { left=relationalExpression() + { + __left.reset(left); + } [ ( t="==" { @@ -206,7 +232,7 @@ AbstractExpression* equalityExpression() : { exp = new EqualityExpression(); exp->setPosition(left); exp->setLeft(left); - left = exp; + left = exp; __left.reset(left); exp->setPosition(t); exp->setOp(EqualityExpression::NOT_EQ); @@ -220,8 +246,7 @@ AbstractExpression* equalityExpression() : { ] {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -231,17 +256,21 @@ AbstractExpression* relationalExpression() : { RelationalExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { left=shiftExpression() - + { + __left.reset(left); + } [ ( t=">" { exp = new RelationalExpression(); exp->setPosition(left); exp->setLeft(left); - left = exp; + left = exp; __left.reset(left); exp->setPosition(t); @@ -252,7 +281,7 @@ AbstractExpression* relationalExpression() : { exp = new RelationalExpression(); exp->setPosition(left); exp->setLeft(left); - left = exp; + left = exp; __left.reset(left); exp->setPosition(t); exp->setOp(RelationalExpression::GT_EQ); @@ -262,7 +291,7 @@ AbstractExpression* relationalExpression() : { exp = new RelationalExpression(); exp->setPosition(left); exp->setLeft(left); - left = exp; + left = exp; __left.reset(left); exp->setPosition(t); @@ -273,7 +302,7 @@ AbstractExpression* relationalExpression() : { exp = new RelationalExpression(); exp->setPosition(left); exp->setLeft(left); - left = exp; + left = exp; __left.reset(left); exp->setPosition(t); exp->setOp(RelationalExpression::LT_EQ); @@ -287,8 +316,7 @@ AbstractExpression* relationalExpression() : { ] {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -297,9 +325,14 @@ AbstractExpression* shiftExpression() : { ShiftExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { left=additiveExpression() + { + __left.reset(left); + } ( ( t="<<" { @@ -307,7 +340,7 @@ AbstractExpression* shiftExpression() : { exp = new ShiftExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -319,7 +352,7 @@ AbstractExpression* shiftExpression() : { exp = new ShiftExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -334,8 +367,7 @@ AbstractExpression* shiftExpression() : { )* {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -344,9 +376,14 @@ AbstractExpression* additiveExpression() : { AddExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { left=multiplicativeExpression() + { + __left.reset(left); + } (LOOKAHEAD(2) ( t="+" { @@ -354,7 +391,7 @@ AbstractExpression* additiveExpression() : { exp = new AddExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -366,7 +403,7 @@ AbstractExpression* additiveExpression() : { exp = new AddExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -381,8 +418,7 @@ AbstractExpression* additiveExpression() : { )* {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -391,9 +427,14 @@ AbstractExpression* multiplicativeExpression() : { MultiplicativeExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { left=negateExpression() + { + __left.reset(left); + } ( ( t="*" { @@ -401,7 +442,7 @@ AbstractExpression* multiplicativeExpression() : { exp = new MultiplicativeExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->addOpe(MultiplicativeExpression::MUL); exp->setPosition(t); @@ -423,7 +464,7 @@ AbstractExpression* multiplicativeExpression() : { exp = new MultiplicativeExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->addOpe(MultiplicativeExpression::MOD); exp->setPosition(t); @@ -437,8 +478,7 @@ AbstractExpression* multiplicativeExpression() : { )* {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -447,18 +487,20 @@ AbstractExpression* negateExpression() :{ NegateExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { [ t="-" { exp = new NegateExpression(); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } ] right=postIncrementExpression() { if(left==nullptr){ - left = right; + left = right; __left.reset(left); } else{ exp->setExpression(right); @@ -466,8 +508,7 @@ AbstractExpression* negateExpression() :{ } } { - __ONERROR(left); - return left; + return __left.move(); } } @@ -475,10 +516,14 @@ AbstractExpression* postIncrementExpression() : { Token* t = nullptr; PostIncrementExpression* exp = nullptr; AbstractExpression* left = nullptr; + + StackRelease __left; } { left=preIncrementExpression() - + { + __left.reset(left); + } [LOOKAHEAD(2) ( t="--" { @@ -487,7 +532,7 @@ AbstractExpression* postIncrementExpression() : { exp->setOpe(PostIncrementExpression::MINUS); exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } | t="++" { @@ -496,14 +541,13 @@ AbstractExpression* postIncrementExpression() : { exp->setOpe(PostIncrementExpression::PLUS); exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } ) ] {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -513,6 +557,8 @@ AbstractExpression* preIncrementExpression() : { PreIncrementExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { [ @@ -521,20 +567,20 @@ AbstractExpression* preIncrementExpression() : { exp = new PreIncrementExpression(); exp->setOpe(PreIncrementExpression::MINUS); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } | t="++" { exp = new PreIncrementExpression(); exp->setOpe(PreIncrementExpression::PLUS); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } ) ] right=bitReverseExpression() { if(left==nullptr){ - left = right; + left = right; __left.reset(left); } else{ exp->setExpression(right); @@ -542,8 +588,7 @@ AbstractExpression* preIncrementExpression() : { } } { - __ONERROR(left); - return left; + return __left.move(); } } @@ -552,18 +597,20 @@ AbstractExpression* bitReverseExpression() : { BitReverseExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { [ t="~" { exp = new BitReverseExpression(); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } ] right=notExpression() { if(left==nullptr){ - left = right; + left = right; __left.reset(left); } else{ exp->setExpression(right); @@ -571,8 +618,7 @@ AbstractExpression* bitReverseExpression() : { } } { - __ONERROR(left); - return left; + return __left.move(); } } @@ -581,18 +627,20 @@ AbstractExpression* notExpression() : { NotExpression* exp = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { [ t="!" { exp = new NotExpression(); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } ] right=castExpression() { if(left==nullptr){ - left = right; + left = right; __left.reset(left); } else{ exp->setExpression(right); @@ -600,8 +648,7 @@ AbstractExpression* notExpression() : { } } { - __ONERROR(left); - return left; + return __left.move(); } } @@ -611,6 +658,8 @@ AbstractExpression* castExpression() : { AbstractType* type = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { (LOOKAHEAD(3) @@ -618,7 +667,7 @@ AbstractExpression* castExpression() : { t="(" { exp = new CastExpression(); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } type=typeDeclare() { @@ -637,14 +686,13 @@ AbstractExpression* castExpression() : { | ( right=memberReferenceExpression() { - left = right; + left = right; __left.reset(left); } ) ) { - __ONERROR(left); - return left; + return __left.move(); } } @@ -653,16 +701,21 @@ AbstractExpression* memberReferenceExpression() :{ Token* t = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { - left=arrayReferenceExpression() + left=arrayReferenceExpression() + { + __left.reset(left); + } ( "." right=arrayReferenceExpression() { if(exp == nullptr){ exp = new MemberReferenceExpression(); exp->addExp(left); exp->setPosition(left); - left = exp; + left = exp; __left.reset(left); } exp->addExp(right); @@ -672,8 +725,7 @@ AbstractExpression* memberReferenceExpression() :{ { } { - __ONERROR(left); - return left; + return __left.move(); } } @@ -683,16 +735,21 @@ AbstractExpression* arrayReferenceExpression() : { Token* t = nullptr; AbstractExpression* left = nullptr; AbstractExpression* right = nullptr; + + StackRelease __left; } { - left=functionCallExpression() + left=functionCallExpression() + { + __left.reset(left); + } (LOOKAHEAD(2) t="[" { if(exp == nullptr){ exp = new ArrayReferenceExpression(); exp->setExp(left); exp->setPosition(left); - left = exp; + left = exp; __left.reset(left); } } right=expression() @@ -703,8 +760,7 @@ AbstractExpression* arrayReferenceExpression() : { )* {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -713,9 +769,14 @@ AbstractExpression* functionCallExpression() : { FunctionCallExpression* exp = nullptr; Token* t = nullptr; AbstractExpression* left = nullptr; + + StackRelease __left; } { left=primitive() + { + __left.reset(left); + } [LOOKAHEAD(2) t="(" { @@ -724,7 +785,7 @@ AbstractExpression* functionCallExpression() : { exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } functionCallExpressionArg(exp) @@ -735,8 +796,7 @@ AbstractExpression* functionCallExpression() : { ] {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -790,10 +850,12 @@ AllocationExpression* allocationExpression() : { Token* t = nullptr; AbstractType* type = nullptr; + + StackRelease __exp; } { t="new" { - exp = new AllocationExpression(); + exp = new AllocationExpression(); __exp.reset(exp); exp->setPosition(t); } @@ -816,15 +878,14 @@ AllocationExpression* allocationExpression() : { ) ) - { - __ONERROR(exp); - return exp; + { + return __exp.move(); } } ConstructorArray* constructorArray(AbstractType* type) : { - ConstructorArray* exp = new ConstructorArray(); + ConstructorArray* exp = new ConstructorArray(); __STP(exp); Token* t = nullptr; AbstractExpression* dim = nullptr; @@ -850,13 +911,12 @@ ConstructorArray* constructorArray(AbstractType* type) : { } { - __ONERROR(exp); - return exp; + return __STP_MV(exp); } } ConstructorCall* constructorCallExpression(AbstractType* type) : { - ConstructorCall* exp = new ConstructorCall(); + ConstructorCall* exp = new ConstructorCall(); __STP(exp); Token* t = nullptr; exp->setName(type); @@ -873,8 +933,7 @@ ConstructorCall* constructorCallExpression(AbstractType* type) : { exp->setPosition(t); } { - __ONERROR(exp); - return exp; + return __STP_MV(exp); } } @@ -903,7 +962,7 @@ void constructorCallExpressionArg(ConstructorCall* exp) : { } ParenthesisExpression* parenthesisExpression() : { - ParenthesisExpression* exp = new ParenthesisExpression(); + ParenthesisExpression* exp = new ParenthesisExpression(); __STP(exp); AbstractExpression* e = nullptr; Token* t = nullptr; } @@ -921,14 +980,13 @@ ParenthesisExpression* parenthesisExpression() : { exp->setPosition(t); } { - __ONERROR(exp); - return exp; + return __STP_MV(exp); } } VariableIdentifier* variableIdentifier() : { - VariableIdentifier* valId = new VariableIdentifier(); + VariableIdentifier* valId = new VariableIdentifier(); __STP(valId); Token* t = nullptr; } { @@ -936,8 +994,7 @@ VariableIdentifier* variableIdentifier() : { valId->setName(_STR(t)); } { - __ONERROR(valId); - return valId; + return __STP_MV(valId); } } @@ -979,7 +1036,7 @@ AbstractExpression* literal() : { NullLiteral* nullLiteral() : { - NullLiteral* lit = new NullLiteral(); + NullLiteral* lit = new NullLiteral(); __STP(lit); Token* t = nullptr; } { @@ -987,13 +1044,12 @@ NullLiteral* nullLiteral() : lit->setPositions(t, t); } { - __ONERROR(lit); - return lit; + return __STP_MV(lit); } } NumberLiteral* numberLiteral() : { - NumberLiteral* lit = new NumberLiteral(); + NumberLiteral* lit = new NumberLiteral(); __STP(lit); Token* t = nullptr; } { @@ -1003,14 +1059,13 @@ NumberLiteral* numberLiteral() : { lit->setPositions(t, t); } { - __ONERROR(lit); - return lit; + return __STP_MV(lit); } } BooleanLiteral* booleanLiteral() : { - BooleanLiteral* lit = new BooleanLiteral(); + BooleanLiteral* lit = new BooleanLiteral(); __STP(lit); Token* t = nullptr; } { @@ -1027,14 +1082,13 @@ BooleanLiteral* booleanLiteral() : { lit->setPositions(t, t); } { - __ONERROR(lit); - return lit; + return __STP_MV(lit); } } LiteralExpression* literalExpression() : { - LiteralExpression* lit = new LiteralExpression(); + LiteralExpression* lit = new LiteralExpression(); __STP(lit); Token* t = nullptr; } { @@ -1050,8 +1104,7 @@ LiteralExpression* literalExpression() : lit->setPositions(t, t); } { - __ONERROR(lit); - return lit; + return __STP_MV(lit); } } diff --git a/src_smartcontract/engine/jj/json.jj b/src_smartcontract/engine/jj/json.jj index 5228366..134f841 100644 --- a/src_smartcontract/engine/jj/json.jj +++ b/src_smartcontract/engine/jj/json.jj @@ -16,14 +16,13 @@ AbstractJsonExpression* jsonElement() : { ) { - __ONERROR(jsonExp); return jsonExp; } } JsonInitializerExpression* jsonInitializerExpression() : { - JsonInitializerExpression* jsonExp = new JsonInitializerExpression(); + JsonInitializerExpression* jsonExp = new JsonInitializerExpression(); __STP(jsonExp); Token* t = nullptr; JsonKeyValuePairExpression* element = nullptr; } @@ -51,14 +50,13 @@ JsonInitializerExpression* jsonInitializerExpression() : jsonExp->setPosition(t); } { - __ONERROR(jsonExp); - return jsonExp; + return __STP_MV(jsonExp); } } JsonArrayExpression* jsonArrayExpression() : { - JsonArrayExpression* jsonExp = new JsonArrayExpression(); + JsonArrayExpression* jsonExp = new JsonArrayExpression(); __STP(jsonExp); AbstractJsonExpression* element = nullptr; Token* t = nullptr; @@ -89,14 +87,13 @@ JsonArrayExpression* jsonArrayExpression() : jsonExp->setPosition(t); } { - __ONERROR(jsonExp); - return jsonExp; + return __STP_MV(jsonExp); } } JsonKeyValuePairExpression* jsonKeyValuePair() : { - JsonKeyValuePairExpression* pair = new JsonKeyValuePairExpression(); + JsonKeyValuePairExpression* pair = new JsonKeyValuePairExpression(); __STP(pair); Token* t = nullptr; AbstractExpression* exp = nullptr; LiteralExpression* lit = nullptr; @@ -129,7 +126,6 @@ JsonKeyValuePairExpression* jsonKeyValuePair() : } ) { - __ONERROR(pair); - return pair; + return __STP_MV(pair); } } diff --git a/src_smartcontract/engine/jj/sql_ddl.jj b/src_smartcontract/engine/jj/sql_ddl.jj index efddaa7..c3bbb33 100644 --- a/src_smartcontract/engine/jj/sql_ddl.jj +++ b/src_smartcontract/engine/jj/sql_ddl.jj @@ -19,7 +19,7 @@ AbstractSQLStatement* ddlStatement() : { } AlterTableStatement* alterTableStatement() : { - AlterTableStatement* stmt = new AlterTableStatement(); + AlterTableStatement* stmt = new AlterTableStatement(); __STP(stmt); TableIdentifier* tableId = nullptr; AbstractAlterDdlCommand* cmd = nullptr; Token* t = null; @@ -47,8 +47,7 @@ AlterTableStatement* alterTableStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } @@ -66,7 +65,6 @@ AbstractAlterDdlCommand* alterCommands() : { cmd=alterRenameCommands() ) { - __ONERROR(cmd); return cmd; } } @@ -83,13 +81,12 @@ AbstractAlterDdlCommand* alterRenameCommands() : { cmd=alterRenameTableCommand(t) ) { - __ONERROR(cmd); return cmd; } } AlterRenameTableCommand* alterRenameTableCommand(Token* t) : { - AlterRenameTableCommand* cmd = new AlterRenameTableCommand(); + AlterRenameTableCommand* cmd = new AlterRenameTableCommand(); __STP(cmd); cmd->setPosition(t); TableIdentifier* tableId = nullptr; @@ -103,13 +100,12 @@ AlterRenameTableCommand* alterRenameTableCommand(Token* t) : { cmd->setNewName(tableId); } { - __ONERROR(cmd); - return cmd; + return __STP_MV(cmd); } } AlterRenameColumnCommand* alterRenameColumnCommand(Token* t) : { - AlterRenameColumnCommand* cmd = new AlterRenameColumnCommand(); + AlterRenameColumnCommand* cmd = new AlterRenameColumnCommand(); __STP(cmd); cmd->setPosition(t); } { @@ -128,13 +124,12 @@ AlterRenameColumnCommand* alterRenameColumnCommand(Token* t) : { } { - __ONERROR(cmd); - return cmd; + return __STP_MV(cmd); } } AlterModifyCommand* alterModifyCommand() : { - AlterModifyCommand* cmd = new AlterModifyCommand(); + AlterModifyCommand* cmd = new AlterModifyCommand(); __STP(cmd); DdlColumnDescriptor* desc = nullptr; Token* t = nullptr; } @@ -147,8 +142,7 @@ AlterModifyCommand* alterModifyCommand() : { cmd->setColumnDescriptor(desc); } { - __ONERROR(cmd); - return cmd; + return __STP_MV(cmd); } } @@ -166,13 +160,12 @@ AbstractAlterDdlCommand* dropAlterCommands() : { cmd=alterDropPrimaryKeyCommand(t) ) { - __ONERROR(cmd); return cmd; } } AlterDropPrimaryKeyCommand* alterDropPrimaryKeyCommand(Token* t) : { - AlterDropPrimaryKeyCommand* cmd = new AlterDropPrimaryKeyCommand(); + AlterDropPrimaryKeyCommand* cmd = new AlterDropPrimaryKeyCommand(); __STP(cmd); cmd->setPosition(t); } { @@ -183,13 +176,12 @@ AlterDropPrimaryKeyCommand* alterDropPrimaryKeyCommand(Token* t) : { cmd->setPosition(t); } { - __ONERROR(cmd); - return cmd; + return __STP_MV(cmd); } } AlterDropIndexCommand* alterDropIndexCommand(Token* t) : { - AlterDropIndexCommand* cmd = new AlterDropIndexCommand(); + AlterDropIndexCommand* cmd = new AlterDropIndexCommand(); __STP(cmd); cmd->setPosition(t); } { @@ -201,13 +193,12 @@ AlterDropIndexCommand* alterDropIndexCommand(Token* t) : { cmd->setName(_STR(t)); } { - __ONERROR(cmd); - return cmd; + return __STP_MV(cmd); } } AlterDropColumnCommand* alterDropColumnCommand(Token* t) : { - AlterDropColumnCommand* cmd = new AlterDropColumnCommand(); + AlterDropColumnCommand* cmd = new AlterDropColumnCommand(); __STP(cmd); cmd->setPosition(t); } { @@ -219,8 +210,7 @@ AlterDropColumnCommand* alterDropColumnCommand(Token* t) : { cmd->setName(_STR(t)); } { - __ONERROR(cmd); - return cmd; + return __STP_MV(cmd); } } @@ -238,13 +228,12 @@ AbstractAlterDdlCommand* addAlterCommands() : { cmd=alterAddPrimaryKeyCommand(t) ) { - __ONERROR(cmd); return cmd; } } AlterAddPrimaryKeyCommand* alterAddPrimaryKeyCommand(Token* t) : { - AlterAddPrimaryKeyCommand* cmd = new AlterAddPrimaryKeyCommand(); + AlterAddPrimaryKeyCommand* cmd = new AlterAddPrimaryKeyCommand(); __STP(cmd); cmd->setPosition(t); } @@ -280,13 +269,12 @@ AlterAddPrimaryKeyCommand* alterAddPrimaryKeyCommand(Token* t) : { } { - __ONERROR(cmd); - return cmd; + return __STP_MV(cmd); } } AlterAddColumnCommand* alterAddColumnCommand(Token* __t) : { - AlterAddColumnCommand* cmd = new AlterAddColumnCommand(); + AlterAddColumnCommand* cmd = new AlterAddColumnCommand(); __STP(cmd); DdlColumnDescriptor* desc = nullptr; cmd->setPosition(__t); @@ -303,13 +291,12 @@ AlterAddColumnCommand* alterAddColumnCommand(Token* __t) : { } { - __ONERROR(cmd); - return cmd; + return __STP_MV(cmd); } } AlterAddIndexCommand* alterAddIndexCommand(Token* t) : { - AlterAddIndexCommand* cmd = new AlterAddIndexCommand(); + AlterAddIndexCommand* cmd = new AlterAddIndexCommand(); __STP(cmd); cmd->setPosition(t); } { @@ -351,14 +338,13 @@ AlterAddIndexCommand* alterAddIndexCommand(Token* t) : { } { - __ONERROR(cmd); - return cmd; + return __STP_MV(cmd); } } CreateTableStatement* createTableStatement() : { - CreateTableStatement* stmt = new CreateTableStatement(); + CreateTableStatement* stmt = new CreateTableStatement(); __STP(stmt); DdlColumnDescriptor* desc = nullptr; Token* t = null; } @@ -432,14 +418,13 @@ CreateTableStatement* createTableStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } DdlColumnDescriptor* ddlColumnDescriptor() : { - DdlColumnDescriptor* desc = new DdlColumnDescriptor(); + DdlColumnDescriptor* desc = new DdlColumnDescriptor(); __STP(desc); ColumnTypeDescriptor* typeDesc = nullptr; AbstractSQLExpression* val = nullptr; Token* t = nullptr; @@ -478,14 +463,13 @@ DdlColumnDescriptor* ddlColumnDescriptor() : } ] { - __ONERROR(desc); - return desc; + return __STP_MV(desc); } } ColumnTypeDescriptor* columnTypeDescriptor() : { - ColumnTypeDescriptor* typeDesc = new ColumnTypeDescriptor(); + ColumnTypeDescriptor* typeDesc = new ColumnTypeDescriptor(); __STP(typeDesc); AbstractSQLExpression* val = nullptr; Token* t1 = nullptr; Token* t2 = nullptr; @@ -510,13 +494,12 @@ ColumnTypeDescriptor* columnTypeDescriptor() : } ] { - __ONERROR(typeDesc); - return typeDesc; + return __STP_MV(typeDesc); } } DropTableStatement* dropTableStatement() : { - DropTableStatement* stmt = new DropTableStatement(); + DropTableStatement* stmt = new DropTableStatement(); __STP(stmt); Token* t = null; TableIdentifier* tableId = nullptr; } @@ -537,7 +520,6 @@ DropTableStatement* dropTableStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } diff --git a/src_smartcontract/engine/jj/sql_dml.jj b/src_smartcontract/engine/jj/sql_dml.jj index b50cc23..f0343b3 100644 --- a/src_smartcontract/engine/jj/sql_dml.jj +++ b/src_smartcontract/engine/jj/sql_dml.jj @@ -23,7 +23,7 @@ AbstractSQLStatement* sqlDmlStatement() : { } SelectStatement* selectStatement() : { - SelectStatement* stmt = new SelectStatement(); + SelectStatement* stmt = new SelectStatement(); __STP(stmt); Token* t = nullptr; SQLSelectTargetList* expList = nullptr; SQLFrom* from = nullptr; @@ -80,13 +80,12 @@ SelectStatement* selectStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } SQLSelectTargetList* sqlSelectTargetList() : { - SQLSelectTargetList* stmt = new SQLSelectTargetList(); + SQLSelectTargetList* stmt = new SQLSelectTargetList(); __STP(stmt); Token* t = nullptr; SQLSelectTarget* target = nullptr; } @@ -106,13 +105,12 @@ SQLSelectTargetList* sqlSelectTargetList() : { )* {} { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } SQLSelectTarget* sqlSelectTarget() : { - SQLSelectTarget* stmt = new SQLSelectTarget(); + SQLSelectTarget* stmt = new SQLSelectTarget(); __STP(stmt); Token* t = nullptr; AbstractSQLExpression* exp = nullptr; } @@ -136,13 +134,12 @@ SQLSelectTarget* sqlSelectTarget() : { ) {} { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } SQLGroupBy* sqlGroupBy() : { - SQLGroupBy* stmt = new SQLGroupBy(); + SQLGroupBy* stmt = new SQLGroupBy(); __STP(stmt); Token* t = nullptr; SQLColumnsList* columns = nullptr; SQLHaving* having = nullptr; @@ -167,8 +164,7 @@ SQLGroupBy* sqlGroupBy() : { ] {} { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } @@ -192,7 +188,7 @@ SQLHaving* sqlHaving() : { } SQLOrderBy* sqlOrderBy() : { - SQLOrderBy* stmt = new SQLOrderBy(); + SQLOrderBy* stmt = new SQLOrderBy(); __STP(stmt); Token* t = nullptr; SQLColumnsList* columns = nullptr; } @@ -208,13 +204,12 @@ SQLOrderBy* sqlOrderBy() : { stmt->setPosition(columns); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } SQLLimitOffset* sqlLimitOffset() : { - SQLLimitOffset* stmt = new SQLLimitOffset(); + SQLLimitOffset* stmt = new SQLLimitOffset(); __STP(stmt); Token* t = nullptr; AbstractSQLExpression* exp = nullptr; } @@ -239,13 +234,12 @@ SQLLimitOffset* sqlLimitOffset() : { ] {} { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } UpdateStatement* updateStatement() : { - UpdateStatement* stmt = new UpdateStatement(); + UpdateStatement* stmt = new UpdateStatement(); __STP(stmt); Token* t = nullptr; TableIdentifier* tableId = nullptr; SQLSet* set = nullptr; @@ -274,13 +268,12 @@ UpdateStatement* updateStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } SQLSet* sqlSet() : { - SQLSet* stmt = new SQLSet(); + SQLSet* stmt = new SQLSet(); __STP(stmt); Token* t = nullptr; SQLSetPair* pair = nullptr; } @@ -303,13 +296,12 @@ SQLSet* sqlSet() : { )* {} { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } SQLSetPair* sqlSetPair() : { - SQLSetPair* stmt = new SQLSetPair(); + SQLSetPair* stmt = new SQLSetPair(); __STP(stmt); Token* t = nullptr; SQLColumnIdentifier* colId = nullptr; AbstractSQLExpression* ex = nullptr; @@ -329,13 +321,12 @@ SQLSetPair* sqlSetPair() : { stmt->setPosition(ex); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } InsertStatement* insertStatement() : { - InsertStatement* stmt = new InsertStatement(); + InsertStatement* stmt = new InsertStatement(); __STP(stmt); Token* t = nullptr; TableIdentifier* tableId = nullptr; SQLColumnsList* columns = nullptr; @@ -387,13 +378,12 @@ InsertStatement* insertStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } SQLColumnsList* sqlColumnsList() : { - SQLColumnsList* stmt = new SQLColumnsList(); + SQLColumnsList* stmt = new SQLColumnsList(); __STP(stmt); Token* t = nullptr; SQLColumnIdentifier* colId = nullptr; } @@ -413,13 +403,12 @@ SQLColumnsList* sqlColumnsList() : { )* {} { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } DeleteStatement* deleteStatement() : { - DeleteStatement* stmt = new DeleteStatement(); + DeleteStatement* stmt = new DeleteStatement(); __STP(stmt); Token* t = nullptr; SQLFrom* from = nullptr; SQLWhere* where = nullptr; @@ -443,13 +432,12 @@ DeleteStatement* deleteStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } SQLWhere* sqlWhere() : { - SQLWhere* stmt = new SQLWhere(); + SQLWhere* stmt = new SQLWhere(); __STP(stmt); Token* t = nullptr; AbstractSQLExpression* exp = nullptr; } @@ -462,13 +450,12 @@ SQLWhere* sqlWhere() : { stmt->setPosition(exp); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } SQLFrom* sqlFrom() : { - SQLFrom* stmt = new SQLFrom(); + SQLFrom* stmt = new SQLFrom(); __STP(stmt); Token* t = nullptr; AbstractJoinPart* tableId = nullptr; } @@ -481,13 +468,12 @@ SQLFrom* sqlFrom() : { stmt->setPosition(tableId); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } BeginStatement* beginStatement() : { - BeginStatement* stmt = new BeginStatement(); + BeginStatement* stmt = new BeginStatement(); __STP(stmt); Token* t = null; } { @@ -499,13 +485,12 @@ BeginStatement* beginStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } CommitStatement* commitStatement() : { - CommitStatement* stmt = new CommitStatement(); + CommitStatement* stmt = new CommitStatement(); __STP(stmt); Token* t = null; } { @@ -516,13 +501,12 @@ CommitStatement* commitStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } RollbackStatement* rollbackStatement() : { - RollbackStatement* stmt = new RollbackStatement(); + RollbackStatement* stmt = new RollbackStatement(); __STP(stmt); Token* t = null; } { @@ -533,7 +517,6 @@ RollbackStatement* rollbackStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } diff --git a/src_smartcontract/engine/jj/sql_expression.jj b/src_smartcontract/engine/jj/sql_expression.jj index aa865d1..9e965da 100644 --- a/src_smartcontract/engine/jj/sql_expression.jj +++ b/src_smartcontract/engine/jj/sql_expression.jj @@ -21,16 +21,21 @@ AbstractSQLExpression* sqlOrExpression() : { Token* t = nullptr; AbstractSQLExpression* left = nullptr; AbstractSQLExpression* right = nullptr; + + StackRelease __left; } { left=sqlAndExpression() + { + __left.reset(left); + } (LOOKAHEAD(2) t= { if(exp == nullptr){ exp = new SQLOrExpression(); exp->addOperand(left); exp->setPosition(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -42,8 +47,7 @@ AbstractSQLExpression* sqlOrExpression() : { )* {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -52,16 +56,21 @@ AbstractSQLExpression* sqlAndExpression() : { Token* t = nullptr; AbstractSQLExpression* left = nullptr; AbstractSQLExpression* right = nullptr; + + StackRelease __left; } { left=sqlNotExpression() + { + __left.reset(left); + } (LOOKAHEAD(2) t= { if(exp == nullptr){ exp = new SQLAndExpression(); exp->addOperand(left); exp->setPosition(left); - left = exp; + left = exp; __left.reset(left); } exp->setPosition(t); @@ -73,8 +82,7 @@ AbstractSQLExpression* sqlAndExpression() : { )* {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -83,18 +91,20 @@ AbstractSQLExpression* sqlNotExpression() : { Token* t = nullptr; AbstractSQLExpression* left = nullptr; AbstractSQLExpression* right = nullptr; + + StackRelease __left; } { [ t= { exp = new SQLNotExpression(); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } ] right=sqlLikeExpression() { if(left == nullptr){ - left = right; + left = right; __left.reset(left); } else{ exp->setExpression(right); @@ -103,8 +113,7 @@ AbstractSQLExpression* sqlNotExpression() : { } { - __ONERROR(left); - return left; + return __left.move(); } } @@ -113,9 +122,14 @@ AbstractSQLExpression* sqlLikeExpression() : { Token* t = nullptr; AbstractSQLExpression* left = nullptr; SQLLiteral* right = nullptr; + + StackRelease __left; } { left=sqlIsNullExpression() + { + __left.reset(left); + } [LOOKAHEAD(2) t= { exp = new SQLLikeExpression(); @@ -123,7 +137,7 @@ AbstractSQLExpression* sqlLikeExpression() : { exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } right=sqlLiteral() { @@ -143,8 +157,7 @@ AbstractSQLExpression* sqlLikeExpression() : { ] {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -153,9 +166,14 @@ AbstractSQLExpression* sqlIsNullExpression() : { Token* t = nullptr; AbstractSQLExpression* left = nullptr; AbstractSQLExpression* right = nullptr; + + StackRelease __left; } { left=sqlBetweenExpression() + { + __left.reset(left); + } [LOOKAHEAD(2) t= { exp = new SQLIsNullExpression(); @@ -163,7 +181,7 @@ AbstractSQLExpression* sqlIsNullExpression() : { exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } [ @@ -179,8 +197,7 @@ AbstractSQLExpression* sqlIsNullExpression() : { ] {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -189,9 +206,14 @@ AbstractSQLExpression* sqlBetweenExpression() : { Token* t = nullptr; AbstractSQLExpression* left = nullptr; AbstractSQLExpression* right = nullptr; + + StackRelease __left; } { left=sqlInExpression() + { + __left.reset(left); + } [ t= { exp = new SQLBetweenExpression(); @@ -199,7 +221,7 @@ AbstractSQLExpression* sqlBetweenExpression() : { exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } right=sqlAdditiveExpression() { @@ -218,8 +240,7 @@ AbstractSQLExpression* sqlBetweenExpression() : { ] {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -228,10 +249,15 @@ AbstractSQLExpression* sqlInExpression() : { Token* t = nullptr; AbstractSQLExpression* left = nullptr; SQLExpressionList* list = nullptr; + + StackRelease __left; } { left=sqlRelationalExpression() + { + __left.reset(left); + } [ t= { exp = new SQLInExpression(); @@ -239,7 +265,7 @@ AbstractSQLExpression* sqlInExpression() : { exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } t="(" { exp->setPosition(t); @@ -255,8 +281,7 @@ AbstractSQLExpression* sqlInExpression() : { ] {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -265,9 +290,14 @@ AbstractSQLExpression* sqlRelationalExpression() : { Token* t = nullptr; AbstractSQLExpression* left = nullptr; AbstractSQLExpression* right = nullptr; + + StackRelease __left; } { left=sqlEqualityExpression() + { + __left.reset(left); + } [ ( t="<" { @@ -277,7 +307,7 @@ AbstractSQLExpression* sqlRelationalExpression() : { exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } | t=">" { @@ -287,7 +317,7 @@ AbstractSQLExpression* sqlRelationalExpression() : { exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } | t="<=" { @@ -297,7 +327,7 @@ AbstractSQLExpression* sqlRelationalExpression() : { exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } | t=">=" { @@ -307,7 +337,7 @@ AbstractSQLExpression* sqlRelationalExpression() : { exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } ) right=sqlEqualityExpression() { @@ -317,8 +347,7 @@ AbstractSQLExpression* sqlRelationalExpression() : { ] {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -327,9 +356,14 @@ AbstractSQLExpression* sqlEqualityExpression() : { Token* t = nullptr; AbstractSQLExpression* left = nullptr; AbstractSQLExpression* right = nullptr; + + StackRelease __left; } { left=sqlAdditiveExpression() + { + __left.reset(left); + } [ ( t="=" { @@ -339,7 +373,7 @@ AbstractSQLExpression* sqlEqualityExpression() : { exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } | t="<>" { @@ -349,7 +383,7 @@ AbstractSQLExpression* sqlEqualityExpression() : { exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } | t="!=" { @@ -359,7 +393,7 @@ AbstractSQLExpression* sqlEqualityExpression() : { exp->setPosition(left); exp->setPosition(t); - left = exp; + left = exp; __left.reset(left); } ) right=sqlAdditiveExpression() { @@ -369,8 +403,7 @@ AbstractSQLExpression* sqlEqualityExpression() : { ] {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -379,9 +412,14 @@ AbstractSQLExpression* sqlAdditiveExpression() : { Token* t = nullptr; AbstractSQLExpression* left = nullptr; AbstractSQLExpression* right = nullptr; + + StackRelease __left; } { left=sqlMultiplicativeExpression() + { + __left.reset(left); + } ( ( t="+" { @@ -389,7 +427,7 @@ AbstractSQLExpression* sqlAdditiveExpression() : { exp = new SQLAdditiveExpression(); exp->addOperand(left); exp->setPosition(left); - left = exp; + left = exp; __left.reset(left); } exp->addOpe(SQLAdditiveExpression::ADD); exp->setPosition(t); @@ -400,7 +438,7 @@ AbstractSQLExpression* sqlAdditiveExpression() : { exp = new SQLAdditiveExpression(); exp->addOperand(left); exp->setPosition(left); - left = exp; + left = exp; __left.reset(left); } exp->addOpe(SQLAdditiveExpression::SUB); exp->setPosition(t); @@ -413,8 +451,7 @@ AbstractSQLExpression* sqlAdditiveExpression() : { )* {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -423,9 +460,14 @@ AbstractSQLExpression* sqlMultiplicativeExpression() : { Token* t = nullptr; AbstractSQLExpression* left = nullptr; AbstractSQLExpression* right = nullptr; + + StackRelease __left; } { left=sqlPrimitiveExpression() + { + __left.reset(left); + } ( ( t="*" { @@ -433,7 +475,7 @@ AbstractSQLExpression* sqlMultiplicativeExpression() : { exp = new SqlMultiplicativeExpression(); exp->addOperand(left); exp->setPosition(left); - left = exp; + left = exp; __left.reset(left); } exp->addOpe(SqlMultiplicativeExpression::MUL); exp->setPosition(t); @@ -444,7 +486,7 @@ AbstractSQLExpression* sqlMultiplicativeExpression() : { exp = new SqlMultiplicativeExpression(); exp->addOperand(left); exp->setPosition(left); - left = exp; + left = exp; __left.reset(left); } exp->addOpe(SqlMultiplicativeExpression::DIV); exp->setPosition(t); @@ -455,7 +497,7 @@ AbstractSQLExpression* sqlMultiplicativeExpression() : { exp = new SqlMultiplicativeExpression(); exp->addOperand(left); exp->setPosition(left); - left = exp; + left = exp; __left.reset(left); } exp->addOpe(SqlMultiplicativeExpression::MOD); exp->setPosition(t); @@ -468,8 +510,7 @@ AbstractSQLExpression* sqlMultiplicativeExpression() : { )* {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -494,7 +535,7 @@ AbstractSQLExpression* sqlPrimitiveExpression() : { } SQLNullLiteral* sqlNullLiteral() : { - SQLNullLiteral* exp = new SQLNullLiteral(); + SQLNullLiteral* exp = new SQLNullLiteral(); __STP(exp); Token* t = nullptr; } { @@ -502,13 +543,12 @@ SQLNullLiteral* sqlNullLiteral() : { exp->setPosition(t); } { - __ONERROR(exp); - return exp; + return __STP_MV(exp); } } SQLWildCard* sqlWildCard() : { - SQLWildCard* exp = new SQLWildCard(); + SQLWildCard* exp = new SQLWildCard(); __STP(exp); Token* t = nullptr; } { @@ -516,13 +556,12 @@ SQLWildCard* sqlWildCard() : { exp->setPosition(t); } { - __ONERROR(exp); - return exp; + return __STP_MV(exp); } } SQLFunctionCall* sqlFunctionCall() : { - SQLFunctionCall* exp = new SQLFunctionCall(); + SQLFunctionCall* exp = new SQLFunctionCall(); __STP(exp); Token* t = nullptr; VariableIdentifier* name = nullptr; } @@ -542,8 +581,7 @@ SQLFunctionCall* sqlFunctionCall() : { } { - __ONERROR(exp); - return exp; + return __STP_MV(exp); } } @@ -573,13 +611,17 @@ void sqlFunctionCallArguments(SQLFunctionCall* exp) : { AbstractSQLExpression* sqlDistinctArgument() : { SQLDistinctArgument* dist = nullptr; + StackRelease __dist; + AbstractSQLExpression* ex = nullptr; + StackRelease __ex; + Token* t = nullptr; } { [LOOKAHEAD(2) t= { - dist = new SQLDistinctArgument(); + dist = new SQLDistinctArgument(); __dist.reset(dist); dist->setPosition(t); } ] @@ -587,17 +629,20 @@ AbstractSQLExpression* sqlDistinctArgument() : { if(t != nullptr){ dist->setPosition(ex); dist->setExpression(ex); - ex = dist; + ex = __dist.move(); __ex.reset(ex); + } + else{ + __ex.reset(ex); } } { - return ex; + return __ex.move(); } } SQLPlaceHolder* sqlPlaceHolder() : { - SQLPlaceHolder* exp = new SQLPlaceHolder(); + SQLPlaceHolder* exp = new SQLPlaceHolder(); __STP(exp); Token* t = nullptr; AbstractExpression* ex = nullptr; } @@ -626,14 +671,13 @@ SQLPlaceHolder* sqlPlaceHolder() : { exp->setPosition(t); } { - __ONERROR(exp); - return exp; + return __STP_MV(exp); } } SQLParenthesisExpression* sqlParenthesisExpression() : { - SQLParenthesisExpression* exp = new SQLParenthesisExpression(); + SQLParenthesisExpression* exp = new SQLParenthesisExpression(); __STP(exp); Token* t = nullptr; AbstractSQLExpression* ex = nullptr; } @@ -651,13 +695,12 @@ SQLParenthesisExpression* sqlParenthesisExpression() : { exp->setPosition(t); } { - __ONERROR(exp); - return exp; + return __STP_MV(exp); } } SQLLiteral* sqlLiteral() : { - SQLLiteral* exp = new SQLLiteral(); + SQLLiteral* exp = new SQLLiteral(); __STP(exp); Token* t = nullptr; } { @@ -679,13 +722,12 @@ SQLLiteral* sqlLiteral() : { ) {} { - __ONERROR(exp); - return exp; + return __STP_MV(exp); } } SQLBooleanLiteral* sqlBooleanLiteral() : { - SQLBooleanLiteral* exp = new SQLBooleanLiteral(); + SQLBooleanLiteral* exp = new SQLBooleanLiteral(); __STP(exp); Token* t = nullptr; } { @@ -702,13 +744,12 @@ SQLBooleanLiteral* sqlBooleanLiteral() : { ) {} { - __ONERROR(exp); - return exp; + return __STP_MV(exp); } } SQLColumnIdentifier* sqlColumnIdentifier() : { - SQLColumnIdentifier* exp = new SQLColumnIdentifier(); + SQLColumnIdentifier* exp = new SQLColumnIdentifier(); __STP(exp); Token* t = nullptr; Token* t1 = nullptr; Token* t2 = nullptr; @@ -749,8 +790,7 @@ SQLColumnIdentifier* sqlColumnIdentifier() : { } } { - __ONERROR(exp); - return exp; + return __STP_MV(exp); } } @@ -779,7 +819,7 @@ Token* sqlIdentifierName() : { */ SQLExpressionList* sqlExpressionList() : { - SQLExpressionList* exp = new SQLExpressionList(); + SQLExpressionList* exp = new SQLExpressionList(); __STP(exp); Token* t = nullptr; AbstractSQLExpression* ex = nullptr; } @@ -800,8 +840,7 @@ SQLExpressionList* sqlExpressionList() : { )* {} { - __ONERROR(exp); - return exp; + return __STP_MV(exp); } } diff --git a/src_smartcontract/engine/jj/sql_join.jj b/src_smartcontract/engine/jj/sql_join.jj index 522073f..f2fd0e1 100644 --- a/src_smartcontract/engine/jj/sql_join.jj +++ b/src_smartcontract/engine/jj/sql_join.jj @@ -8,9 +8,14 @@ AbstractJoinPart* tableList() : { TableList* tablelist = nullptr; Token* t = nullptr; TableIdentifier* table = nullptr; + + StackRelease __left; } { left=join() + { + __left.reset(left); + } ( t="," { if(tablelist == nullptr){ @@ -18,7 +23,7 @@ AbstractJoinPart* tableList() : { tablelist->addTable(left); tablelist->setPosition(left); - left = tablelist; + left = tablelist; __left.reset(left); } tablelist->setPosition(t); @@ -31,8 +36,7 @@ AbstractJoinPart* tableList() : { )* {} { - __ONERROR(left); - return left; + return __left.move(); } } @@ -41,9 +45,13 @@ AbstractJoinPart* join() : { SQLJoinPart* right = nullptr; SQLJoin* joinBody = nullptr; + StackRelease __left; } { left=joinTarget() + { + __left.reset(left); + } ( ( right=leftJoin() @@ -60,7 +68,7 @@ AbstractJoinPart* join() : { joinBody->setPosition(left); joinBody->setFirst(left); - left = joinBody; + left = joinBody; __left.reset(left); } joinBody->addJoinPart(right); @@ -68,13 +76,12 @@ AbstractJoinPart* join() : { )* { - __ONERROR(left); - return left; + return __left.move(); } } SQLJoinPart* innerJoin() : { - SQLJoinPart* join = new SQLJoinPart(); + SQLJoinPart* join = new SQLJoinPart(); __STP(join); join->setJoinType(SQLJoinPart::INNER_JOIN); Token* t = nullptr; AbstractSQLExpression* exp = nullptr; @@ -103,14 +110,13 @@ SQLJoinPart* innerJoin() : { ] {} { - __ONERROR(join); - return join; + return __STP_MV(join); } } SQLJoinPart* leftJoin() : { - SQLJoinPart* join = new SQLJoinPart(); + SQLJoinPart* join = new SQLJoinPart(); __STP(join); join->setJoinType(SQLJoinPart::LEFT_OUTER_JOIN); Token* t = nullptr; AbstractSQLExpression* exp = nullptr; @@ -143,13 +149,12 @@ SQLJoinPart* leftJoin() : { ] {} { - __ONERROR(join); - return join; + return __STP_MV(join); } } SQLJoinPart* rightJoin() : { - SQLJoinPart* join = new SQLJoinPart(); + SQLJoinPart* join = new SQLJoinPart(); __STP(join); join->setJoinType(SQLJoinPart::RIGHT_OUTER_JOIN); Token* t = nullptr; AbstractSQLExpression* exp = nullptr; @@ -182,13 +187,12 @@ SQLJoinPart* rightJoin() : { ] {} { - __ONERROR(join); - return join; + return __STP_MV(join); } } SQLJoinPart* crossJoin() : { - SQLJoinPart* join = new SQLJoinPart(); + SQLJoinPart* join = new SQLJoinPart(); __STP(join); join->setJoinType(SQLJoinPart::CROSS_JOIN); Token* t = nullptr; AbstractSQLExpression* exp = nullptr; @@ -217,8 +221,7 @@ SQLJoinPart* crossJoin() : { {} { - __ONERROR(join); - return join; + return __STP_MV(join); } } @@ -239,7 +242,7 @@ AbstractJoinPart* joinTarget() : { } ParenthesisJoinPart* parenthesisJoinPart() : { - ParenthesisJoinPart* part = new ParenthesisJoinPart(); + ParenthesisJoinPart* part = new ParenthesisJoinPart(); __STP(part); Token* t = nullptr; AbstractJoinPart* target = nullptr; } @@ -257,13 +260,12 @@ ParenthesisJoinPart* parenthesisJoinPart() : { part->setPosition(t); } { - __ONERROR(part); - return part; + return __STP_MV(part); } } TableIdentifier* tableIdentifier() : { - TableIdentifier* exp = new TableIdentifier(); + TableIdentifier* exp = new TableIdentifier(); __STP(exp); Token* t = nullptr; Token* t1 = nullptr; Token* t2 = nullptr; @@ -300,7 +302,6 @@ TableIdentifier* tableIdentifier() : { ] { - __ONERROR(exp); - return exp; + return __STP_MV(exp); } } diff --git a/src_smartcontract/engine/jj/statement.jj b/src_smartcontract/engine/jj/statement.jj index c257ebd..d47829f 100644 --- a/src_smartcontract/engine/jj/statement.jj +++ b/src_smartcontract/engine/jj/statement.jj @@ -7,20 +7,33 @@ AbstractStatement* statement() : { AbstractStatement* stmt = nullptr; } { - ( - LOOKAHEAD(3) stmt=statementBlock() | - LOOKAHEAD(4) stmt=substitutionStatement() | - stmt=variableDeclareStatement() | - //stmt=expressionStatement() | - stmt=ctrlStatement() | - stmt=blankStatement() | - stmt=ddlStatement() | - stmt=sqlDmlStatement() - ) - {} - { - return stmt; + try { + ( + LOOKAHEAD(3) stmt=statementBlock() | + LOOKAHEAD(4) stmt=substitutionStatement() | + stmt=variableDeclareStatement() | + //stmt=expressionStatement() | + stmt=ctrlStatement() | + stmt=blankStatement() | + stmt=ddlStatement() | + stmt=sqlDmlStatement() + ) + {} + { + return stmt; + } + } + catch(ParseException* e){ + std::exception_ptr p = std::current_exception(); + try{ + std::rethrow_exception(p); + }catch(ParseException* e){ + if(e != nullptr){ + delete e; + } + } } + } VariableDeclareStatement* variableDeclareStatement() : { @@ -33,14 +46,13 @@ VariableDeclareStatement* variableDeclareStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); return stmt; } } VariableDeclareStatement* __variableDeclareStatement() : { - VariableDeclareStatement* stmt = new VariableDeclareStatement(); + VariableDeclareStatement* stmt = new VariableDeclareStatement(); __STP(stmt); AbstractType* type = nullptr; VariableIdentifier* valId = nullptr; AbstractExpression* exp = nullptr; @@ -68,8 +80,7 @@ VariableDeclareStatement* __variableDeclareStatement() : { ] { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } @@ -90,19 +101,25 @@ AbstractStatement* substitutionStatement() : { AbstractStatement* __substitutionStatement() : { AbstractStatement* stmt = nullptr; + StackRelease __stmt; AbstractExpression* first = nullptr; + StackRelease __first; + AbstractExpression* exp = nullptr; Token* t = nullptr; } { first=expression() + { + __first.reset(first); + } [ t="=" exp=expression() { SubstitutionStatement* sstmt = new SubstitutionStatement(); - stmt = sstmt; - sstmt->setVariableId(first); + stmt = sstmt; __stmt.reset(stmt); + sstmt->setVariableId(__first.move()); sstmt->setPosition(first); sstmt->setExpression(exp); @@ -112,19 +129,18 @@ AbstractStatement* __substitutionStatement() : { { if(stmt == nullptr){ ExpressionStatement* exstmt = new ExpressionStatement(); - stmt = exstmt; - exstmt->setExpression(first); + stmt = exstmt; __stmt.reset(stmt); + exstmt->setExpression(__first.move()); exstmt->setPosition(first); } } { - __ONERROR(stmt); - return stmt; + return __stmt.move(); } } BlankStatement* blankStatement() : { - BlankStatement* stmt = new BlankStatement(); + BlankStatement* stmt = new BlankStatement(); __STP(stmt); Token* t = nullptr; } { @@ -134,13 +150,12 @@ BlankStatement* blankStatement() : { } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } StatementBlock* statementBlock() : { - StatementBlock* block = new StatementBlock(); + StatementBlock* block = new StatementBlock(); __STP(block); AbstractStatement* stmt = nullptr; Token* t = nullptr; } @@ -160,14 +175,13 @@ StatementBlock* statementBlock() : { block->setPosition(t); } { - __ONERROR(block); - return block; + return __STP_MV(block); } } /* ExpressionStatement* expressionStatement() : { - ExpressionStatement* stmt = new ExpressionStatement(); + ExpressionStatement* stmt = new ExpressionStatement(); __STP(stmt); Token* t = nullptr; AbstractExpression* exp = nullptr; } @@ -180,8 +194,7 @@ ExpressionStatement* expressionStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } */ diff --git a/src_smartcontract/engine/jj/statement_ctrl.jj b/src_smartcontract/engine/jj/statement_ctrl.jj index d4bb5e2..344c867 100644 --- a/src_smartcontract/engine/jj/statement_ctrl.jj +++ b/src_smartcontract/engine/jj/statement_ctrl.jj @@ -25,7 +25,7 @@ AbstractStatement* ctrlStatement() : { } TryStatement* tryStatement() : { - TryStatement* stmt = new TryStatement(); + TryStatement* stmt = new TryStatement(); __STP(stmt); StatementBlock* block = nullptr; Token* t = nullptr; @@ -56,13 +56,12 @@ TryStatement* tryStatement() : { ] { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } FinallyStatement* finallyStatement() : { - FinallyStatement* stmt = new FinallyStatement(); + FinallyStatement* stmt = new FinallyStatement(); __STP(stmt); StatementBlock* block = nullptr; Token* t = nullptr; } @@ -75,13 +74,12 @@ FinallyStatement* finallyStatement() : { stmt->setPosition(block); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } CatchStatement* catchStatement() : { - CatchStatement* stmt = new CatchStatement(); + CatchStatement* stmt = new CatchStatement(); __STP(stmt); StatementBlock* block = nullptr; Token* t = nullptr; @@ -110,13 +108,12 @@ CatchStatement* catchStatement() : { } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } ThrowStatement* throwStatement() : { - ThrowStatement* stmt = new ThrowStatement(); + ThrowStatement* stmt = new ThrowStatement(); __STP(stmt); AbstractExpression* exp = nullptr; Token* t = nullptr; } @@ -133,13 +130,12 @@ ThrowStatement* throwStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } ForStatement* forStatement() : { - ForStatement* stmt = new ForStatement(); + ForStatement* stmt = new ForStatement(); __STP(stmt); AbstractExpression* exp = nullptr; AbstractStatement* st = nullptr; Token* t = nullptr; @@ -182,8 +178,7 @@ ForStatement* forStatement() : { } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } @@ -197,13 +192,12 @@ AbstractStatement* forInnerStatement() : { stmt=__variableDeclareStatement() ) { - __ONERROR(stmt); return stmt; } } DoWhileStatement* doWhileStatement() : { - DoWhileStatement* stmt = new DoWhileStatement(); + DoWhileStatement* stmt = new DoWhileStatement(); __STP(stmt); AbstractExpression* exp = nullptr; AbstractStatement* st = nullptr; Token* t = nullptr; @@ -232,13 +226,12 @@ DoWhileStatement* doWhileStatement() : { } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } WhileStatement* whileStatement() : { - WhileStatement* stmt = new WhileStatement(); + WhileStatement* stmt = new WhileStatement(); __STP(stmt); AbstractExpression* exp = nullptr; AbstractStatement* st = nullptr; Token* t = nullptr; @@ -265,13 +258,12 @@ WhileStatement* whileStatement() : { } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } ReturnStatement* returnStatement() : { - ReturnStatement* stmt = new ReturnStatement(); + ReturnStatement* stmt = new ReturnStatement(); __STP(stmt); AbstractExpression* exp = nullptr; Token* t = nullptr; } @@ -289,13 +281,12 @@ ReturnStatement* returnStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } ContinueStatement* continueStatement() : { - ContinueStatement* stmt = new ContinueStatement(); + ContinueStatement* stmt = new ContinueStatement(); __STP(stmt); Token* t = nullptr; } { @@ -306,14 +297,13 @@ ContinueStatement* continueStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } BreakStatement* breakStatement() : { - BreakStatement* stmt = new BreakStatement(); + BreakStatement* stmt = new BreakStatement(); __STP(stmt); Token* t = nullptr; } { @@ -324,13 +314,12 @@ BreakStatement* breakStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); - return stmt; + return __STP_MV(stmt); } } IfStatement* ifStatement() : { - IfStatement* ifstmt = new IfStatement(); + IfStatement* ifstmt = new IfStatement(); __STP(ifstmt); AbstractExpression* exp; AbstractStatement* stmt; Token* t = nullptr; @@ -370,13 +359,12 @@ IfStatement* ifStatement() : { ] { - __ONERROR(ifstmt); - return ifstmt; + return __STP_MV(ifstmt); } } IfStatement* elseifStatement() : { - IfStatement* ifstmt = new IfStatement(); + IfStatement* ifstmt = new IfStatement(); __STP(ifstmt); AbstractExpression* exp; AbstractStatement* stmt; Token* t = nullptr; @@ -398,8 +386,7 @@ IfStatement* elseifStatement() : { ifstmt->setPosition(stmt); } { - __ONERROR(ifstmt); - return ifstmt; + return __STP_MV(ifstmt); } } diff --git a/src_smartcontract/engine/jj/types.jj b/src_smartcontract/engine/jj/types.jj index a544724..5285bb2 100644 --- a/src_smartcontract/engine/jj/types.jj +++ b/src_smartcontract/engine/jj/types.jj @@ -16,7 +16,6 @@ AbstractType* typeDeclare() : { { } { - __ONERROR(dec); return dec; } } @@ -47,13 +46,12 @@ AbstractType* typeBody() : { dec=objectType() ) { - __ONERROR(dec); return dec; } } ObjectType* objectType() : { - ObjectType* dec = new ObjectType(); + ObjectType* dec = new ObjectType(); __STP(dec); PackageNameDeclare* packageName = nullptr; Token* t=nullptr; GenericsObjectType* geneticsObject = nullptr; @@ -106,13 +104,12 @@ ObjectType* objectType() : { { - __ONERROR(dec); - return dec; + return __STP_MV(dec); } } BoolType* boolType() : { - BoolType* dec = new BoolType(); + BoolType* dec = new BoolType(); __STP(dec); Token* t=nullptr; } { @@ -120,13 +117,12 @@ BoolType* boolType() : { dec->setPositions(_P(t, t)); } { - __ONERROR(dec); - return dec; + return __STP_MV(dec); } } ByteType* byteType() : { - ByteType* dec = new ByteType(); + ByteType* dec = new ByteType(); __STP(dec); Token* t=nullptr; } { @@ -134,13 +130,12 @@ ByteType* byteType() : { dec->setPositions(_P(t, t)); } { - __ONERROR(dec); - return dec; + return __STP_MV(dec); } } CharType* charType() : { - CharType* dec = new CharType(); + CharType* dec = new CharType(); __STP(dec); Token* t=nullptr; } { @@ -148,13 +143,12 @@ CharType* charType() : { dec->setPositions(_P(t, t)); } { - __ONERROR(dec); - return dec; + return __STP_MV(dec); } } ShortType* shortType() : { - ShortType* dec = new ShortType(); + ShortType* dec = new ShortType(); __STP(dec); Token* t=nullptr; } { @@ -162,13 +156,12 @@ ShortType* shortType() : { dec->setPositions(_P(t, t)); } { - __ONERROR(dec); - return dec; + return __STP_MV(dec); } } IntType* intType() : { - IntType* dec = new IntType(); + IntType* dec = new IntType(); __STP(dec); Token* t=nullptr; } { @@ -176,13 +169,12 @@ IntType* intType() : { dec->setPositions(_P(t, t)); } { - __ONERROR(dec); - return dec; + return __STP_MV(dec); } } LongType* longType() : { - LongType* dec = new LongType(); + LongType* dec = new LongType(); __STP(dec); Token* t=nullptr; } { @@ -190,13 +182,12 @@ LongType* longType() : { dec->setPositions(_P(t, t)); } { - __ONERROR(dec); - return dec; + return __STP_MV(dec); } } StringType* stringType() : { - StringType* dec = new StringType(); + StringType* dec = new StringType(); __STP(dec); Token* t=nullptr; } { @@ -204,13 +195,12 @@ StringType* stringType() : { dec->setPositions(_P(t, t)); } { - __ONERROR(dec); - return dec; + return __STP_MV(dec); } } VoidType* voidType() : { - VoidType* dec = new VoidType(); + VoidType* dec = new VoidType(); __STP(dec); Token* t=nullptr; } { @@ -218,13 +208,12 @@ VoidType* voidType() : { dec->setPositions(_P(t, t)); } { - __ONERROR(dec); - return dec; + return __STP_MV(dec); } } DomType* domType() : { - DomType* dec = new DomType(); + DomType* dec = new DomType(); __STP(dec); Token* t=nullptr; } { @@ -232,8 +221,7 @@ DomType* domType() : { dec->setPositions(_P(t, t)); } { - __ONERROR(dec); - return dec; + return __STP_MV(dec); } } diff --git a/src_smartcontract/engine/sc/alinouslang.h b/src_smartcontract/engine/sc/alinouslang.h index f879603..ffb8c06 100644 --- a/src_smartcontract/engine/sc/alinouslang.h +++ b/src_smartcontract/engine/sc/alinouslang.h @@ -9,6 +9,9 @@ #define SC_ALINOUSLANG_H_ #include "base/UnicodeString.h" +#include "base/StackRelease.h" + +#include "alinous_lang/ParseException.h" #include "engine/sc/CompilationUnit.h" @@ -172,7 +175,7 @@ using namespace alinous; #define _STR(t) new UnicodeString(t->image.c_str()) #define __ONERROR(obj) \ - if(hasError){\ + //if(hasError){\ delete obj, obj=nullptr;\ } diff --git a/src_test/CMakeLists.txt b/src_test/CMakeLists.txt index 46b7f68..f35a8c2 100644 --- a/src_test/CMakeLists.txt +++ b/src_test/CMakeLists.txt @@ -67,6 +67,7 @@ add_subdirectory(smartcontract_db/toolkit_groupby) add_subdirectory(smartcontract_db/toolkit_index) add_subdirectory(smartcontract_db/toolkit_join) add_subdirectory(smartcontract_db/variable) +add_subdirectory(smartcontract_err) add_subdirectory(smartcontract_modular/instance) add_subdirectory(smartcontract_modular/instance_move) add_subdirectory(smartcontract_modular/operation) diff --git a/src_test/blockchain/finalizer/test_register_vote_ticket.cpp b/src_test/blockchain/finalizer/test_register_vote_ticket.cpp index 64ddad9..499bacc 100644 --- a/src_test/blockchain/finalizer/test_register_vote_ticket.cpp +++ b/src_test/blockchain/finalizer/test_register_vote_ticket.cpp @@ -51,7 +51,7 @@ TEST(TestRegisterVoteTicketGroup, case01){ InstanceDriver driver(&projectFolder); DebugDefaultLogger* logger = driver.getLogger(); - logger->setSection(ISystemLogger::DEBUG_UTXO_ID); + logger->addSection(ISystemLogger::DEBUG_UTXO_ID); CodablecashSystemParam param; DebugCodablecashSystemParamSetup::setupConfig01(param); diff --git a/src_test/blockchain/finalizer/test_vote_and_finalize.cpp b/src_test/blockchain/finalizer/test_vote_and_finalize.cpp index 6f89ffe..48b0d09 100644 --- a/src_test/blockchain/finalizer/test_vote_and_finalize.cpp +++ b/src_test/blockchain/finalizer/test_vote_and_finalize.cpp @@ -145,7 +145,7 @@ TEST(TestVoteAndFinalizeTicketGroup, case02){ File projectFolder = this->env->testCaseDir(); InstanceDriver driver(&projectFolder); - driver.getLogger()->setSection(ISystemLogger::DEBUG_CHAIN_HEAD_DETECT); + driver.getLogger()->addSection(ISystemLogger::DEBUG_CHAIN_HEAD_DETECT); CodablecashSystemParam param; DebugCodablecashSystemParamSetup::setupConfig01(param); diff --git a/src_test/blockchain/finalizer/test_vote_revoke.cpp b/src_test/blockchain/finalizer/test_vote_revoke.cpp index 94e22da..caf4e0c 100644 --- a/src_test/blockchain/finalizer/test_vote_revoke.cpp +++ b/src_test/blockchain/finalizer/test_vote_revoke.cpp @@ -52,7 +52,7 @@ TEST(TestVoteRevokeTicketGroup, case01){ File projectFolder = this->env->testCaseDir(); InstanceDriver driver(&projectFolder); - driver.getLogger()->setSection(ISystemLogger::DEBUG_CHAIN_HEAD_DETECT); + driver.getLogger()->addSection(ISystemLogger::DEBUG_CHAIN_HEAD_DETECT); CodablecashSystemParam config; DebugCodablecashSystemParamSetup::setupConfig01(config); diff --git a/src_test/blockchain/finalizer/test_vote_revoke_validation.cpp b/src_test/blockchain/finalizer/test_vote_revoke_validation.cpp index b712ff0..5e3eddf 100644 --- a/src_test/blockchain/finalizer/test_vote_revoke_validation.cpp +++ b/src_test/blockchain/finalizer/test_vote_revoke_validation.cpp @@ -62,7 +62,7 @@ TEST(TestVoteRevokeTicketValidationGroup, case01){ File projectFolder = this->env->testCaseDir(); InstanceDriver driver(&projectFolder); - driver.getLogger()->setSection(ISystemLogger::DEBUG_CHAIN_HEAD_DETECT); + driver.getLogger()->addSection(ISystemLogger::DEBUG_CHAIN_HEAD_DETECT); CodablecashSystemParam param; DebugCodablecashSystemParamSetup::setupConfig01(param); @@ -161,7 +161,7 @@ TEST(TestVoteRevokeTicketValidationGroup, case02){ File projectFolder = this->env->testCaseDir(); InstanceDriver driver(&projectFolder); - driver.getLogger()->setSection(ISystemLogger::DEBUG_CHAIN_HEAD_DETECT); + driver.getLogger()->addSection(ISystemLogger::DEBUG_CHAIN_HEAD_DETECT); CodablecashSystemParam config; DebugCodablecashSystemParamSetup::setupConfig01(config); diff --git a/src_test/blockchain/pow_pool/test_pow_pool.cpp b/src_test/blockchain/pow_pool/test_pow_pool.cpp index 5e856f1..2188e9b 100644 --- a/src_test/blockchain/pow_pool/test_pow_pool.cpp +++ b/src_test/blockchain/pow_pool/test_pow_pool.cpp @@ -55,7 +55,7 @@ TEST(TestPoWPoolGroup, case01){ DebugDefaultLogger logger; - logger.setSection(ISystemLogger::DEBUG_POOL_TRANSFER_RESPONSE); + logger.addSection(ISystemLogger::DEBUG_POOL_TRANSFER_RESPONSE); PoWManager manager(&logger, &mconfig); File* memdir = projectFolder.get(L"mempool"); __STP(memdir); diff --git a/src_test/blockchain/testnet/test_first_net.cpp b/src_test/blockchain/testnet/test_first_net.cpp index e004e17..5a028ba 100644 --- a/src_test/blockchain/testnet/test_first_net.cpp +++ b/src_test/blockchain/testnet/test_first_net.cpp @@ -60,8 +60,8 @@ TEST(TestFirstNetGroup, case01){ File* dirNode03 = projectFolder.get(L"node03"); __STP(dirNode03); DebugDefaultLogger logger; - logger.setSection(ISystemLogger::DEBUG_NODE_TRANSFER_RESPONSE); - logger.setSection(ISystemLogger::DEBUG_POW_CALC_THREAD); + logger.addSection(ISystemLogger::DEBUG_NODE_TRANSFER_RESPONSE); + logger.addSection(ISystemLogger::DEBUG_POW_CALC_THREAD); CodablecashSystemParam param; DebugCodablecashSystemParamSetup::setupConfig02(param); diff --git a/src_test/blockchain/testnet/test_pending_request_processor.cpp b/src_test/blockchain/testnet/test_pending_request_processor.cpp index 1a49ecc..43ab1c9 100644 --- a/src_test/blockchain/testnet/test_pending_request_processor.cpp +++ b/src_test/blockchain/testnet/test_pending_request_processor.cpp @@ -82,8 +82,8 @@ TEST(TestPendingRequestProcessorGroup, case01){ File* dirNode02 = projectFolder.get(L"node02"); __STP(dirNode02); DebugDefaultLogger logger; - logger.setSection(DebugDefaultLogger::DEBUG_NODE_TRANSFER_RESPONSE); - logger.setSection(DebugDefaultLogger::DEBUG_TMP_INFO); + logger.addSection(DebugDefaultLogger::DEBUG_NODE_TRANSFER_RESPONSE); + logger.addSection(DebugDefaultLogger::DEBUG_TMP_INFO); CodablecashSystemParam param; DebugCodablecashSystemParamSetup::setupConfig02(param); @@ -221,8 +221,8 @@ TEST(TestPendingRequestProcessorGroup, case01_02){ File* dirNode02 = projectFolder.get(L"node02"); __STP(dirNode02); DebugDefaultLogger logger; - logger.setSection(DebugDefaultLogger::DEBUG_NODE_TRANSFER_RESPONSE); - logger.setSection(DebugDefaultLogger::DEBUG_TMP_INFO); + logger.addSection(DebugDefaultLogger::DEBUG_NODE_TRANSFER_RESPONSE); + logger.addSection(DebugDefaultLogger::DEBUG_TMP_INFO); CodablecashSystemParam param; DebugCodablecashSystemParamSetup::setupConfig02(param); diff --git a/src_test/blockchain/testnet/test_sync_header_only.cpp b/src_test/blockchain/testnet/test_sync_header_only.cpp index ddecc7e..605fc58 100644 --- a/src_test/blockchain/testnet/test_sync_header_only.cpp +++ b/src_test/blockchain/testnet/test_sync_header_only.cpp @@ -64,7 +64,7 @@ TEST(TestSyncHeaderOnlyGroup, case01){ File* dirWallet01 = projectFolder.get(L"wallet01"); __STP(dirWallet01); DebugDefaultLogger logger; - logger.setSection(ISystemLogger::DEBUG_NODE_TRANSFER_RESPONSE); + logger.addSection(ISystemLogger::DEBUG_NODE_TRANSFER_RESPONSE); // logger.setSection(ISystemLogger::DEBUG_POW_CALC_THREAD); CodablecashSystemParam param; diff --git a/src_test/blockchain/wallet/test_net_wallet.cpp b/src_test/blockchain/wallet/test_net_wallet.cpp index 5ea6d01..533c2f3 100644 --- a/src_test/blockchain/wallet/test_net_wallet.cpp +++ b/src_test/blockchain/wallet/test_net_wallet.cpp @@ -98,10 +98,10 @@ TEST_GROUP(TestNetWalletGroup) { this->portSel = new StackTestPortGetter(); this->params = new TesGrouptParams(); - this->params->logger->setSection(ISystemLogger::DEBUG_NODE_TRANSFER_RESPONSE); + this->params->logger->addSection(ISystemLogger::DEBUG_NODE_TRANSFER_RESPONSE); DebugDefaultLogger* logger = this->params->logger; - logger->setSection(ISystemLogger::DEBUG_CHAIN_HEAD_DETECT); + logger->addSection(ISystemLogger::DEBUG_CHAIN_HEAD_DETECT); this->env->getTestGroup()->setParam(this->params); diff --git a/src_test/p2p/p2pserver/test_p2p_client_command.cpp b/src_test/p2p/p2pserver/test_p2p_client_command.cpp index 1f26d26..481dc4e 100644 --- a/src_test/p2p/p2pserver/test_p2p_client_command.cpp +++ b/src_test/p2p/p2pserver/test_p2p_client_command.cpp @@ -84,7 +84,7 @@ TEST(TestP2pCommandGroup, case01){ DummyClientListner listner; { DebugDefaultLogger* logger = driver.getLogger(); - logger->setSection(ISystemLogger::DEBUG_NODE_TRANSFER_RESPONSE); + logger->addSection(ISystemLogger::DEBUG_NODE_TRANSFER_RESPONSE); UnicodeString strLocal(L"::1"); P2pClient* client = ClientConnectUtils::connect(&strLocal, port, 0, logger); __STP(client); diff --git a/src_test/smartcontract_err/CMakeLists.txt b/src_test/smartcontract_err/CMakeLists.txt new file mode 100644 index 0000000..4b7fd91 --- /dev/null +++ b/src_test/smartcontract_err/CMakeLists.txt @@ -0,0 +1,7 @@ + +set(testsrc + test_statement_error.cpp + test_exception_std.cpp +) +handle_sub(testall "${testsrc}" test smartcontract_err) + diff --git a/src_test/smartcontract_err/resources/class01/main.alns b/src_test/smartcontract_err/resources/class01/main.alns new file mode 100644 index 0000000..3385f14 --- /dev/null +++ b/src_test/smartcontract_err/resources/class01/main.alns @@ -0,0 +1,23 @@ + + +package test.fw; + +import test.fw.ObjectA; + +class SmartContract { + public SmartContract() { + int[] ar; + ar = null; + + ar[1] = 10; + + this.result = ar[1]; + } + + public int main(){ + + } + + private int result; +} + diff --git a/src_test/smartcontract_err/resources/class01/main_err.alns b/src_test/smartcontract_err/resources/class01/main_err.alns new file mode 100644 index 0000000..82f7c3d --- /dev/null +++ b/src_test/smartcontract_err/resources/class01/main_err.alns @@ -0,0 +1,23 @@ + + +package test.fw; + +import test.fw.ObjectA; + +class SmartContract { + public SmartContract() { + int[] ar; + ar = null; + + ar[1] = 10; + + this.result = a + } + + public int main(){ + + } + + private int result; +} + diff --git a/src_test/smartcontract_err/test_exception_std.cpp b/src_test/smartcontract_err/test_exception_std.cpp new file mode 100644 index 0000000..72703f1 --- /dev/null +++ b/src_test/smartcontract_err/test_exception_std.cpp @@ -0,0 +1,41 @@ +/* + * test_exception_std.cpp + * + * Created on: Apr 28, 2026 + * Author: iizuka + */ +#include + +#include "test_utils/t_macros.h" + +using std::__exception_ptr::exception_ptr; + +TEST_GROUP(TestExceptionStrGroup) { + TEST_SETUP(){} + TEST_TEARDOWN(){} +}; + +class ErrObject { +public: +}; + +TEST(TestExceptionStrGroup, case01){ + try { + throw new ErrObject(); + } + catch (...) { + std::exception_ptr p = std::current_exception(); + + try{ + std::rethrow_exception(p); + }catch(ErrObject* e){ + if(e != nullptr){ + delete e; + } + } + + } +} + + + diff --git a/src_test/smartcontract_err/test_statement_error.cpp b/src_test/smartcontract_err/test_statement_error.cpp new file mode 100644 index 0000000..555bf24 --- /dev/null +++ b/src_test/smartcontract_err/test_statement_error.cpp @@ -0,0 +1,37 @@ +/* + * test_statement_error.cpp + * + * Created on: Apr 28, 2026 + * Author: iizuka + */ +#include "test_utils/t_macros.h" + +#include "engine/compiler/SmartContractParser.h" + +#include "lang/sc_statement/AbstractStatement.h" + +TEST_GROUP(TestStatementErrorGroup) { + TEST_SETUP(){} + TEST_TEARDOWN(){} +}; + +TEST(TestStatementErrorGroup, case01){ + const File* projectFolder = this->env->getProjectRoot(); + _ST(File, sourceFile, projectFolder->get(L"src_test/smartcontract_err/resources/class01/main.alns")) + + SmartContractParser parser(sourceFile); + CompilationUnit* unit = parser.parse(); + + CHECK(!parser.hasError()) +} + +TEST(TestStatementErrorGroup, case02_err){ + const File* projectFolder = this->env->getProjectRoot(); + _ST(File, sourceFile, projectFolder->get(L"src_test/smartcontract_err/resources/class01/main_err.alns")) + + SmartContractParser parser(sourceFile); + CompilationUnit* unit = parser.parse(); + + CHECK(parser.hasError()) +} + From af3db8c0eb5b8a4b4bd70ca0ba8b0a34d952dd6b Mon Sep 17 00:00:00 2001 From: iizuka Date: Sat, 16 May 2026 12:21:00 +0800 Subject: [PATCH 2/2] versioning --- .../bc/BlockchainSoftwareVersion.cpp | 33 + src_blockchain/bc/BlockchainSoftwareVersion.h | 26 + src_blockchain/bc/CMakeLists.txt | 1 + src_blockchain/bc_block/BlockHeader.cpp | 27 +- src_blockchain/bc_block/BlockHeader.h | 5 + src_blockchain/bc_block/BlockVersion.cpp | 36 + src_blockchain/bc_block/BlockVersion.h | 26 + src_blockchain/bc_block/CMakeLists.txt | 1 + .../AbstractBlockRewordTransaction.cpp | 14 +- .../bc_blockstore/CodablecashBlockchain.cpp | 10 +- .../bc_blockstore/CodablecashBlockchain.h | 4 +- .../AbstractRevokeTransaction.cpp | 7 +- .../RevokeMissVotedTicket.cpp | 12 +- .../bc_finalizer_trx/RevokeMissedTicket.cpp | 10 +- .../bc_trx/AbstractBlockchainTransaction.cpp | 5 + .../bc_trx/AbstractBlockchainTransaction.h | 3 +- .../bc_trx/AbstractControlTransaction.cpp | 17 +- src_blockchain/bc_trx/CMakeLists.txt | 1 + .../NopInterChainCommunicationTransaction.cpp | 12 +- src_blockchain/bc_trx/TransactionVersion.cpp | 35 + src_blockchain/bc_trx/TransactionVersion.h | 26 + .../BalanceTransferTransaction.cpp | 15 +- .../bc_trx_genesis/GenesisTransaction.cpp | 13 +- .../Pool2ClientTransferCommandMessage.cpp | 7 + .../pow_pool_client/PoWClientMainThread.cpp | 16 +- .../NetworkTransferNodeCommand.cpp | 7 + src_gen/alinous_lang/AlinousLang.cc | 180 ++- src_gen/alinous_lang/AlinousLang.h | 1136 ++++++++--------- .../engine/compiler/CMakeLists.txt | 1 + .../engine/compiler/LexErrorHandler.cpp | 5 + .../engine/compiler/ParseErrorHandler.cpp | 2 +- .../engine/compiler/SmartContractParser.cpp | 6 +- .../compiler/StatementRepairSkipper.cpp | 112 ++ .../engine/compiler/StatementRepairSkipper.h | 49 + src_smartcontract/engine/jj/alinous.jj | 156 ++- src_smartcontract/engine/jj/base.jj | 4 +- src_smartcontract/engine/jj/expression.jj | 10 +- src_smartcontract/engine/jj/statement.jj | 17 +- src_smartcontract/engine/jj/statement_ctrl.jj | 117 +- src_smartcontract/engine/jj/types.jj | 8 +- src_smartcontract/engine/sc/alinouslang.h | 2 + .../sc_statement_ctrl/DoWhileStatement.cpp | 23 +- .../lang/sc_statement_ctrl/IfStatement.cpp | 29 +- .../NopSmartcontractTransaction.cpp | 11 +- src_test/CMakeLists.txt | 1 + .../blockchain/multi_shard/CMakeLists.txt | 6 + .../blockchain/pow_pool/test_pow_pool.cpp | 4 +- .../trx/test_ticket_transaction_wallet.cpp | 16 +- src_test/smartcontract/test_parser.cpp | 30 +- .../select_condition/test_like_condition.cpp | 10 +- src_test/smartcontract_err/CMakeLists.txt | 1 + .../resources/class01/main_err_eof.alns | 14 + .../resources/class01/main_err_if.alns | 26 + .../resources/class01/main_err_lbrace.alns | 24 + .../resources/class01/main_err_lex.alns | 23 + .../resources/class01/main_err_semicoron.alns | 25 + .../resources/for01/main_err_for.alns | 27 + .../resources/if01/main_err_if.alns | 27 + .../resources/while01/main_err_while.alns | 27 + .../test_recover_while_if.cpp | 52 + .../test_statement_error.cpp | 62 + .../base/resources/typeres/impl.alns | 2 +- 62 files changed, 1783 insertions(+), 831 deletions(-) create mode 100644 src_blockchain/bc/BlockchainSoftwareVersion.cpp create mode 100644 src_blockchain/bc/BlockchainSoftwareVersion.h create mode 100644 src_blockchain/bc_block/BlockVersion.cpp create mode 100644 src_blockchain/bc_block/BlockVersion.h create mode 100644 src_blockchain/bc_trx/TransactionVersion.cpp create mode 100644 src_blockchain/bc_trx/TransactionVersion.h create mode 100644 src_smartcontract/engine/compiler/StatementRepairSkipper.cpp create mode 100644 src_smartcontract/engine/compiler/StatementRepairSkipper.h create mode 100644 src_test/blockchain/multi_shard/CMakeLists.txt create mode 100644 src_test/smartcontract_err/resources/class01/main_err_eof.alns create mode 100644 src_test/smartcontract_err/resources/class01/main_err_if.alns create mode 100644 src_test/smartcontract_err/resources/class01/main_err_lbrace.alns create mode 100644 src_test/smartcontract_err/resources/class01/main_err_lex.alns create mode 100644 src_test/smartcontract_err/resources/class01/main_err_semicoron.alns create mode 100644 src_test/smartcontract_err/resources/for01/main_err_for.alns create mode 100644 src_test/smartcontract_err/resources/if01/main_err_if.alns create mode 100644 src_test/smartcontract_err/resources/while01/main_err_while.alns create mode 100644 src_test/smartcontract_err/test_recover_while_if.cpp diff --git a/src_blockchain/bc/BlockchainSoftwareVersion.cpp b/src_blockchain/bc/BlockchainSoftwareVersion.cpp new file mode 100644 index 0000000..b310ec0 --- /dev/null +++ b/src_blockchain/bc/BlockchainSoftwareVersion.cpp @@ -0,0 +1,33 @@ +/* + * BlockchainSoftwareVersion.cpp + * + * Created on: May 5, 2026 + * Author: iizuka + */ + +#include "bc/BlockchainSoftwareVersion.h" + +#include "base_io/ByteBuffer.h" + +namespace codablecash { +/* +BlockchainSoftwareVersion::BlockchainSoftwareVersion(const BlockchainSoftwareVersion &inst) : SoftwareVersion(inst) { +}*/ + +BlockchainSoftwareVersion::BlockchainSoftwareVersion(int major, int minor, int patch) : SoftwareVersion(major, minor, patch) { + +} + +BlockchainSoftwareVersion::~BlockchainSoftwareVersion() { + +} +/* +BlockchainSoftwareVersion* BlockchainSoftwareVersion::createFromBinary(ByteBuffer *in) { + uint8_t major = in->get(); + uint8_t minor = in->get(); + uint8_t pathch = in->get(); + + return new BlockchainSoftwareVersion(major, minor, pathch); +} +*/ +} /* namespace codablecash */ diff --git a/src_blockchain/bc/BlockchainSoftwareVersion.h b/src_blockchain/bc/BlockchainSoftwareVersion.h new file mode 100644 index 0000000..a54a724 --- /dev/null +++ b/src_blockchain/bc/BlockchainSoftwareVersion.h @@ -0,0 +1,26 @@ +/* + * BlockchainSoftwareVersion.h + * + * Created on: May 5, 2026 + * Author: iizuka + */ + +#ifndef BC_BLOCKCHAINSOFTWAREVERSION_H_ +#define BC_BLOCKCHAINSOFTWAREVERSION_H_ + +#include "bc/SoftwareVersion.h" + +namespace codablecash { + +class BlockchainSoftwareVersion : public SoftwareVersion { +public: + //BlockchainSoftwareVersion(const BlockchainSoftwareVersion& inst); + BlockchainSoftwareVersion(int major, int minor, int patch); + virtual ~BlockchainSoftwareVersion(); + + //static BlockchainSoftwareVersion* createFromBinary(ByteBuffer* in); +}; + +} /* namespace codablecash */ + +#endif /* BC_BLOCKCHAINSOFTWAREVERSION_H_ */ diff --git a/src_blockchain/bc/CMakeLists.txt b/src_blockchain/bc/CMakeLists.txt index 48552fe..97948ba 100644 --- a/src_blockchain/bc/CMakeLists.txt +++ b/src_blockchain/bc/CMakeLists.txt @@ -1,6 +1,7 @@ set(__src + BlockchainSoftwareVersion.cpp CodablecashNodeInstance.cpp CodablecashSystemParam.cpp DebugDefaultLogger.cpp diff --git a/src_blockchain/bc_block/BlockHeader.cpp b/src_blockchain/bc_block/BlockHeader.cpp index 2f36ce6..64f8644 100644 --- a/src_blockchain/bc_block/BlockHeader.cpp +++ b/src_blockchain/bc_block/BlockHeader.cpp @@ -7,6 +7,7 @@ #include "bc_block/BlockHeader.h" #include "bc_block/BlockHeaderId.h" +#include "bc_block/BlockVersion.h" #include "base/StackRelease.h" @@ -25,11 +26,12 @@ #include "bc_block_vote/VotePart.h" #include "bc_block_vote/VotedHeaderIdGroup.h" - +#include "bc_base/BinaryUtils.h" namespace codablecash { BlockHeader::BlockHeader() { + this->version = new BlockVersion(1, 0, 0); this->zone = 0; this->height = 0; this->id = new BlockHeaderId(); @@ -47,10 +49,11 @@ BlockHeader::BlockHeader() { this->nonce = new PoWNonce(&defaultNonce); this->votePart = new VotePart(); - this->lastNouceCalculated = dynamic_cast(Os::now().copyData());; + this->lastNouceCalculated = dynamic_cast(Os::now().copyData()); } BlockHeader::~BlockHeader() { + delete this->version; delete this->id; delete this->merkleRoot; delete this->lastid; @@ -63,7 +66,9 @@ BlockHeader::~BlockHeader() { } int BlockHeader::binarySize() const { - int total = sizeof(this->zone) + sizeof(this->height); + BinaryUtils::checkNotNull(this->version); + + int total = this->version->binarySize() + sizeof(this->zone) + sizeof(this->height); total += this->timestamp->binarySize(); total += this->nonceGeneratedtimestamp->binarySize(); @@ -77,6 +82,9 @@ int BlockHeader::binarySize() const { } void BlockHeader::toBinary(ByteBuffer *out) const { + BinaryUtils::checkNotNull(this->version); + + this->version->toBinary(out); out->putShort(this->zone); out->putLong(this->height); @@ -92,6 +100,9 @@ void BlockHeader::toBinary(ByteBuffer *out) const { BlockHeader* BlockHeader::createFromBinary(ByteBuffer* in) { BlockHeader* header = new BlockHeader(); __STP(header); + BlockVersion* ver = BlockVersion::createFromBinary(in); __STP(ver); + header->setVersion(ver); + uint16_t zone = in->getShort(); header->setZone(zone); @@ -134,13 +145,20 @@ IBlockObject* BlockHeader::copyData() const noexcept { return BlockHeader::createFromBinary(buff); } +void BlockHeader::setVersion(const BlockVersion *ver) { + delete this->version, this->version = nullptr; + this->version = new BlockVersion(*ver); +} + void BlockHeader::setHeaderId(BlockHeaderId* id) noexcept { delete this->id; this->id = id; } void BlockHeader::buildHeaderId() { - int total = sizeof(this->zone) + sizeof(this->height); + BinaryUtils::checkNotNull(this->version); + + int total = this->version->binarySize() + sizeof(this->zone) + sizeof(this->height); total += this->timestamp->binarySize(); //total += this->nonceGeneratedtimestamp->binarySize(); // do not include calculated time @@ -151,6 +169,7 @@ void BlockHeader::buildHeaderId() { total += this->lastNouceCalculated->binarySize(); ByteBuffer* buff = ByteBuffer::allocateWithEndian(total, true); __STP(buff); + this->version->toBinary(buff); buff->putShort(this->zone); buff->putLong(this->height); this->timestamp->toBinary(buff); diff --git a/src_blockchain/bc_block/BlockHeader.h b/src_blockchain/bc_block/BlockHeader.h index 349281e..1935411 100644 --- a/src_blockchain/bc_block/BlockHeader.h +++ b/src_blockchain/bc_block/BlockHeader.h @@ -28,6 +28,7 @@ class Block; class IVoteTransactionIdCertificateBuilder; class IVoteTransactionIdCertificatevisitor; class TransactionId; +class BlockVersion; class BlockHeader : public alinous::IBlockObject { public: @@ -41,6 +42,8 @@ class BlockHeader : public alinous::IBlockObject { virtual IBlockObject* copyData() const noexcept; + void setVersion(const BlockVersion* ver); + void setHeight(uint64_t height) noexcept { this->height = height; } @@ -104,6 +107,8 @@ class BlockHeader : public alinous::IBlockObject { void visitVoteTransactionIdCertificate(IVoteTransactionIdCertificatevisitor* visitor) const; private: + BlockVersion* version; + uint16_t zone; uint64_t height; SystemTimestamp* timestamp; diff --git a/src_blockchain/bc_block/BlockVersion.cpp b/src_blockchain/bc_block/BlockVersion.cpp new file mode 100644 index 0000000..3a08ef6 --- /dev/null +++ b/src_blockchain/bc_block/BlockVersion.cpp @@ -0,0 +1,36 @@ +/* + * BlockVersion.cpp + * + * Created on: May 5, 2026 + * Author: iizuka + */ + +#include "bc_block/BlockVersion.h" + +#include "bc/SoftwareVersion.h" + +#include "base_io/ByteBuffer.h" + +namespace codablecash { + + +BlockVersion::BlockVersion(const BlockVersion &inst) : SoftwareVersion(inst.major, inst.minor, inst.patch) { +} + +BlockVersion::BlockVersion(int major, int minor, int patch) : SoftwareVersion(major, minor, patch) { + +} + +BlockVersion::~BlockVersion() { + +} + +BlockVersion* BlockVersion::createFromBinary(ByteBuffer *in) { + uint8_t major = in->get(); + uint8_t minor = in->get(); + uint8_t pathch = in->get(); + + return new BlockVersion(major, minor, pathch); +} + +} /* namespace codablecash */ diff --git a/src_blockchain/bc_block/BlockVersion.h b/src_blockchain/bc_block/BlockVersion.h new file mode 100644 index 0000000..51a0e71 --- /dev/null +++ b/src_blockchain/bc_block/BlockVersion.h @@ -0,0 +1,26 @@ +/* + * BlockVersion.h + * + * Created on: May 5, 2026 + * Author: iizuka + */ + +#ifndef BC_BLOCK_BLOCKVERSION_H_ +#define BC_BLOCK_BLOCKVERSION_H_ + +#include "bc/SoftwareVersion.h" + +namespace codablecash { + +class BlockVersion : public SoftwareVersion { +public: + BlockVersion(const BlockVersion& inst); + BlockVersion(int major, int minor, int patch); + virtual ~BlockVersion(); + + static BlockVersion* createFromBinary(ByteBuffer* in); +}; + +} /* namespace codablecash */ + +#endif /* BC_BLOCK_BLOCKVERSION_H_ */ diff --git a/src_blockchain/bc_block/CMakeLists.txt b/src_blockchain/bc_block/CMakeLists.txt index 5c5f8b6..aa01b05 100644 --- a/src_blockchain/bc_block/CMakeLists.txt +++ b/src_blockchain/bc_block/CMakeLists.txt @@ -7,5 +7,6 @@ set(__src BlockMerkleRoot.cpp BlockMerkleRootKey.cpp BlockMerkleRootKeyFactory.cpp + BlockVersion.cpp ) handle_sub(codablecashlib "${__src}" blockchain bc_block) diff --git a/src_blockchain/bc_block_body/AbstractBlockRewordTransaction.cpp b/src_blockchain/bc_block_body/AbstractBlockRewordTransaction.cpp index b36a44b..616d888 100644 --- a/src_blockchain/bc_block_body/AbstractBlockRewordTransaction.cpp +++ b/src_blockchain/bc_block_body/AbstractBlockRewordTransaction.cpp @@ -11,6 +11,7 @@ #include "bc_trx/AbstractUtxo.h" #include "bc_trx/AbstractUtxoReference.h" +#include "bc_trx/TransactionVersion.h" #include "base/StackRelease.h" @@ -81,8 +82,9 @@ AbstractUtxoReference* AbstractBlockRewordTransaction::getUtxoReference(int i) c void AbstractBlockRewordTransaction::setUtxoNonce() noexcept { assert(this->height != 0L); BinaryUtils::checkNotNull(this->timestamp); + BinaryUtils::checkNotNull(this->version); - int capacity = sizeof(uint8_t) + this->timestamp->binarySize() + sizeof(this->height); + int capacity = sizeof(uint8_t) + this->version->binarySize() + this->timestamp->binarySize() + sizeof(this->height); { int maxLoop = getUtxoReferenceSize(); for(int i = 0; i != maxLoop; ++i){ @@ -94,6 +96,7 @@ void AbstractBlockRewordTransaction::setUtxoNonce() noexcept { ByteBuffer* buff = ByteBuffer::allocateWithEndian(capacity, true); __STP(buff); buff->put(getType()); + this->version->toBinary(buff); this->timestamp->toBinary(buff); buff->putLong(this->height); { @@ -119,9 +122,11 @@ void AbstractBlockRewordTransaction::setUtxoNonce() noexcept { } int AbstractBlockRewordTransaction::__binarySize() const { + BinaryUtils::checkNotNull(this->version); BinaryUtils::checkNotNull(this->timestamp); int total = sizeof(uint8_t); + total += this->version->binarySize(); total += this->timestamp->binarySize(); total += sizeof(this->height); @@ -149,9 +154,11 @@ int AbstractBlockRewordTransaction::__binarySize() const { } void AbstractBlockRewordTransaction::__toBinary(ByteBuffer *out) const { + BinaryUtils::checkNotNull(this->version); BinaryUtils::checkNotNull(this->timestamp); out->put(getType()); + this->version->toBinary(out); this->timestamp->toBinary(out); out->putLong(this->height); @@ -181,7 +188,10 @@ BalanceUnit AbstractBlockRewordTransaction::getFee() const noexcept { } void AbstractBlockRewordTransaction::__fromBinary(ByteBuffer *in) { - delete this->timestamp; + delete this->version, this->version = nullptr; + this->version = TransactionVersion::createFromBinary(in); + + delete this->timestamp, timestamp = nullptr; this->timestamp = SystemTimestamp::fromBinary(in); this->height = in->getLong(); diff --git a/src_blockchain/bc_blockstore/CodablecashBlockchain.cpp b/src_blockchain/bc_blockstore/CodablecashBlockchain.cpp index 444f329..4877d85 100644 --- a/src_blockchain/bc_blockstore/CodablecashBlockchain.cpp +++ b/src_blockchain/bc_blockstore/CodablecashBlockchain.cpp @@ -24,7 +24,7 @@ #include "base_thread/ConcurrentGate.h" #include "base_thread/SysMutex.h" -#include "bc/SoftwareVersion.h" +#include "bc/BlockchainSoftwareVersion.h" #include "bc_block/Block.h" #include "bc_block/BlockHeader.h" @@ -36,6 +36,8 @@ #include "base_thread/StackUnlocker.h" #include "bc_block/BlockMerkleRoot.h" + + namespace codablecash { const UnicodeString CodablecashBlockchain::CONFIG_BIN_FILE(L"config.bin"); @@ -57,7 +59,7 @@ CodablecashBlockchain::CodablecashBlockchain(const File *baseDir, uint16_t zoneS this->sectionLimit = DEFAULT_SECTION_LIMIT; this->configStore = nullptr; - this->version = new SoftwareVersion(0, 1, 0); + this->version = new BlockchainSoftwareVersion(0, 1, 0); this->rwLock = new ConcurrentGate(); this->processor = nullptr; @@ -71,7 +73,7 @@ CodablecashBlockchain::CodablecashBlockchain(const File* baseDir) { this->numZones = 0; this->sectionLimit = 0; this->configStore = nullptr; - this->version = new SoftwareVersion(0, 1, 0); + this->version = new BlockchainSoftwareVersion(0, 1, 0); this->rwLock = new ConcurrentGate(); this->processor = nullptr; @@ -223,7 +225,7 @@ void CodablecashBlockchain::loadCondig() { int patch = this->configStore->getShortValue(&KEY_BLOCK_VERSION_PATCH); delete this->version; - this->version = new SoftwareVersion(major, minor, patch); + this->version = new BlockchainSoftwareVersion(major, minor, patch); } void CodablecashBlockchain::addBlock(MemPoolTransaction* memTrx, const Block *block) { diff --git a/src_blockchain/bc_blockstore/CodablecashBlockchain.h b/src_blockchain/bc_blockstore/CodablecashBlockchain.h index 4e4666b..8450df7 100644 --- a/src_blockchain/bc_blockstore/CodablecashBlockchain.h +++ b/src_blockchain/bc_blockstore/CodablecashBlockchain.h @@ -27,7 +27,7 @@ namespace codablecash { class ZoneStore; class StatusStore; -class SoftwareVersion; +class BlockchainSoftwareVersion; class Block; class BlockHeader; class IBlockchainEventListner; @@ -102,7 +102,7 @@ class CodablecashBlockchain : public IBlockchainStoreProvider { private: File* baseDir; - SoftwareVersion* version; + BlockchainSoftwareVersion* version; int sectionLimit; diff --git a/src_blockchain/bc_finalizer_trx/AbstractRevokeTransaction.cpp b/src_blockchain/bc_finalizer_trx/AbstractRevokeTransaction.cpp index 4b30740..b64eb30 100644 --- a/src_blockchain/bc_finalizer_trx/AbstractRevokeTransaction.cpp +++ b/src_blockchain/bc_finalizer_trx/AbstractRevokeTransaction.cpp @@ -15,11 +15,13 @@ #include "bc_trx/AbstractUtxo.h" #include "bc_trx/AbstractUtxoReference.h" +#include "bc_trx/TransactionVersion.h" #include "bc_base/BinaryUtils.h" #include "base_timestamp/SystemTimestamp.h" + namespace codablecash { AbstractRevokeTransaction::AbstractRevokeTransaction(const AbstractRevokeTransaction &inst) @@ -55,9 +57,10 @@ void AbstractRevokeTransaction::setUtxoNonce() noexcept { } int AbstractRevokeTransaction::__binarySize() const { + BinaryUtils::checkNotNull(this->version); BinaryUtils::checkNotNull(this->timestamp); - int capacity = sizeof(uint8_t) + this->timestamp->binarySize(); + int capacity = sizeof(uint8_t) + this->version->binarySize() + this->timestamp->binarySize(); int maxLoop = getUtxoReferenceSize(); for(int i = 0; i != maxLoop; ++i){ @@ -69,9 +72,11 @@ int AbstractRevokeTransaction::__binarySize() const { } void AbstractRevokeTransaction::__toBinary(ByteBuffer *out) const { + BinaryUtils::checkNotNull(this->version); BinaryUtils::checkNotNull(this->timestamp); out->put(getType()); + this->version->toBinary(out); this->timestamp->toBinary(out); int maxLoop = getUtxoReferenceSize(); diff --git a/src_blockchain/bc_finalizer_trx/RevokeMissVotedTicket.cpp b/src_blockchain/bc_finalizer_trx/RevokeMissVotedTicket.cpp index 27373c7..5a1374d 100644 --- a/src_blockchain/bc_finalizer_trx/RevokeMissVotedTicket.cpp +++ b/src_blockchain/bc_finalizer_trx/RevokeMissVotedTicket.cpp @@ -6,12 +6,12 @@ */ #include "bc_finalizer_trx/RevokeMissVotedTicket.h" - #include "bc_finalizer_trx/TicketVotedUtxoReference.h" #include "bc_base/BinaryUtils.h" #include "bc_trx/TransactionId.h" +#include "bc_trx/TransactionVersion.h" #include "bc_trx_balance/BalanceUtxo.h" @@ -21,6 +21,7 @@ #include "base_timestamp/SystemTimestamp.h" + namespace codablecash { RevokeMissVotedTicket::RevokeMissVotedTicket( const RevokeMissVotedTicket &inst) @@ -37,11 +38,12 @@ RevokeMissVotedTicket::~RevokeMissVotedTicket() { } int RevokeMissVotedTicket::binarySize() const { + BinaryUtils::checkNotNull(this->version); BinaryUtils::checkNotNull(this->timestamp); BinaryUtils::checkNotNull(this->ticketVoteUtxoRef); int total = sizeof(uint8_t); - + total += this->version->binarySize(); total += this->timestamp->binarySize(); total += this->ticketVoteUtxoRef->binarySize(); @@ -57,11 +59,12 @@ int RevokeMissVotedTicket::binarySize() const { } void RevokeMissVotedTicket::toBinary(ByteBuffer *out) const { + BinaryUtils::checkNotNull(this->version); BinaryUtils::checkNotNull(this->timestamp); BinaryUtils::checkNotNull(this->ticketVoteUtxoRef); out->put(getType()); - + this->version->toBinary(out); this->timestamp->toBinary(out); this->ticketVoteUtxoRef->toBinary(out); @@ -75,6 +78,9 @@ void RevokeMissVotedTicket::toBinary(ByteBuffer *out) const { } void RevokeMissVotedTicket::fromBinary(ByteBuffer *in) { + delete this->version, this->version = nullptr; + this->version = TransactionVersion::createFromBinary(in); + delete this->timestamp; this->timestamp = SystemTimestamp::fromBinary(in); diff --git a/src_blockchain/bc_finalizer_trx/RevokeMissedTicket.cpp b/src_blockchain/bc_finalizer_trx/RevokeMissedTicket.cpp index e571e92..2ff86f8 100644 --- a/src_blockchain/bc_finalizer_trx/RevokeMissedTicket.cpp +++ b/src_blockchain/bc_finalizer_trx/RevokeMissedTicket.cpp @@ -11,6 +11,7 @@ #include "bc_base/BinaryUtils.h" #include "bc_trx/TransactionId.h" +#include "bc_trx/TransactionVersion.h" #include "bc_trx_balance/BalanceUtxo.h" @@ -20,6 +21,7 @@ #include "base_timestamp/SystemTimestamp.h" + namespace codablecash { RevokeMissedTicket::RevokeMissedTicket(const RevokeMissedTicket &inst) : AbstractRevokeTransaction(inst) { @@ -35,11 +37,13 @@ RevokeMissedTicket::~RevokeMissedTicket() { } int RevokeMissedTicket::binarySize() const { + BinaryUtils::checkNotNull(this->version); BinaryUtils::checkNotNull(this->timestamp); BinaryUtils::checkNotNull(this->ticketUtxoRef); int total = sizeof(uint8_t); + total += this->version->binarySize(); total += this->timestamp->binarySize(); total += this->ticketUtxoRef->binarySize(); @@ -55,11 +59,12 @@ int RevokeMissedTicket::binarySize() const { } void RevokeMissedTicket::toBinary(ByteBuffer *out) const { + BinaryUtils::checkNotNull(this->version); BinaryUtils::checkNotNull(this->timestamp); BinaryUtils::checkNotNull(this->ticketUtxoRef); out->put(getType()); - + this->version->toBinary(out); this->timestamp->toBinary(out); this->ticketUtxoRef->toBinary(out); @@ -73,6 +78,9 @@ void RevokeMissedTicket::toBinary(ByteBuffer *out) const { } void RevokeMissedTicket::fromBinary(ByteBuffer *in) { + delete this->version, this->version = nullptr; + this->version = TransactionVersion::createFromBinary(in); + delete this->timestamp; this->timestamp = SystemTimestamp::fromBinary(in); diff --git a/src_blockchain/bc_trx/AbstractBlockchainTransaction.cpp b/src_blockchain/bc_trx/AbstractBlockchainTransaction.cpp index a3efa00..d3c2741 100644 --- a/src_blockchain/bc_trx/AbstractBlockchainTransaction.cpp +++ b/src_blockchain/bc_trx/AbstractBlockchainTransaction.cpp @@ -12,6 +12,7 @@ #include "bc_trx/IUtxoRefChecker.h" #include "bc_trx/IAddressChecker.h" #include "bc_trx/UtxoId.h" +#include "bc_trx/TransactionVersion.h" #include "bc_trx_genesis/GenesisTransaction.h" @@ -41,6 +42,7 @@ #include "bc_wallet_filter/BloomFilter1024.h" + using alinous::Os; namespace codablecash { @@ -48,16 +50,19 @@ namespace codablecash { AbstractBlockchainTransaction::AbstractBlockchainTransaction(const AbstractBlockchainTransaction &inst) { this->trxId = inst.trxId != nullptr ? dynamic_cast(inst.trxId->copyData()) : nullptr; this->timestamp = dynamic_cast(inst.timestamp->copyData()); + this->version = new TransactionVersion(*inst.version); } AbstractBlockchainTransaction::AbstractBlockchainTransaction() { this->trxId = nullptr; this->timestamp = dynamic_cast(Os::now().copyData()); + this->version = new TransactionVersion(1, 0 , 0); } AbstractBlockchainTransaction::~AbstractBlockchainTransaction() { delete this->trxId; delete this->timestamp; + delete this->version; } AbstractBlockchainTransaction* AbstractBlockchainTransaction::createFromBinary(ByteBuffer *in) { diff --git a/src_blockchain/bc_trx/AbstractBlockchainTransaction.h b/src_blockchain/bc_trx/AbstractBlockchainTransaction.h index 62cb599..52bb974 100644 --- a/src_blockchain/bc_trx/AbstractBlockchainTransaction.h +++ b/src_blockchain/bc_trx/AbstractBlockchainTransaction.h @@ -30,6 +30,7 @@ class IUtxoRefChecker; class IAddressChecker; class MerkleTree; class UtxoId; +class TransactionVersion; enum class TrxValidationResult { @@ -128,7 +129,7 @@ class AbstractBlockchainTransaction : public alinous::IBlockObject { protected: TransactionId* trxId; SystemTimestamp* timestamp; - + TransactionVersion* version; }; } /* namespace codablecash */ diff --git a/src_blockchain/bc_trx/AbstractControlTransaction.cpp b/src_blockchain/bc_trx/AbstractControlTransaction.cpp index 8249c5c..062ee7c 100644 --- a/src_blockchain/bc_trx/AbstractControlTransaction.cpp +++ b/src_blockchain/bc_trx/AbstractControlTransaction.cpp @@ -28,6 +28,8 @@ #include "crypto/Sha256.h" #include "base_timestamp/SystemTimestamp.h" + +#include "bc_trx/TransactionVersion.h" namespace codablecash { AbstractControlTransaction::AbstractControlTransaction(const AbstractControlTransaction &inst) @@ -76,10 +78,11 @@ int AbstractControlTransaction::binarySize() const { } int AbstractControlTransaction::__binarySize() const { + BinaryUtils::checkNotNull(this->version); BinaryUtils::checkNotNull(this->timestamp); int total = sizeof(uint8_t); - + total += this->version->binarySize(); total += this->timestamp->binarySize(); total += this->inputs->binarySize(); @@ -106,10 +109,11 @@ void AbstractControlTransaction::toBinary(ByteBuffer *out) const { } } void AbstractControlTransaction::__toBinary(ByteBuffer *out) const { + BinaryUtils::checkNotNull(this->version); BinaryUtils::checkNotNull(this->timestamp); out->put(getType()); - + this->version->toBinary(out); this->timestamp->toBinary(out); this->inputs->toBinary(out); @@ -135,6 +139,9 @@ void AbstractControlTransaction::fromBinary(ByteBuffer *in) { } void AbstractControlTransaction::__fromBinary(ByteBuffer *in) { + delete this->version, this->version = nullptr; + this->version = TransactionVersion::createFromBinary(in); + delete this->timestamp; this->timestamp = SystemTimestamp::fromBinary(in); @@ -206,10 +213,14 @@ bool AbstractControlTransaction::verify() const { } void AbstractControlTransaction::setUtxoNonce() noexcept { - int capacity = sizeof(uint8_t) + this->timestamp->binarySize() + this->inputs->binarySize(); + BinaryUtils::checkNotNull(this->version); + BinaryUtils::checkNotNull(this->timestamp); + + int capacity = sizeof(uint8_t) + this->version->binarySize() + this->timestamp->binarySize() + this->inputs->binarySize(); ByteBuffer* buff = ByteBuffer::allocateWithEndian(capacity, true); __STP(buff); buff->put(getType()); + this->version->toBinary(buff); this->timestamp->toBinary(buff); this->inputs->toBinary(buff); diff --git a/src_blockchain/bc_trx/CMakeLists.txt b/src_blockchain/bc_trx/CMakeLists.txt index 821603c..670b2a7 100644 --- a/src_blockchain/bc_trx/CMakeLists.txt +++ b/src_blockchain/bc_trx/CMakeLists.txt @@ -11,6 +11,7 @@ set(__src IUtxoRefChecker.cpp NopInterChainCommunicationTransaction.cpp TransactionId.cpp + TransactionVersion.cpp UtxoId.cpp ) handle_sub(codablecashlib "${__src}" blockchain bc_trx) diff --git a/src_blockchain/bc_trx/NopInterChainCommunicationTransaction.cpp b/src_blockchain/bc_trx/NopInterChainCommunicationTransaction.cpp index 6ddfb7a..ec27a8b 100644 --- a/src_blockchain/bc_trx/NopInterChainCommunicationTransaction.cpp +++ b/src_blockchain/bc_trx/NopInterChainCommunicationTransaction.cpp @@ -6,6 +6,9 @@ */ #include "bc_trx/NopInterChainCommunicationTransaction.h" +#include "bc_trx/TransactionVersion.h" +#include "bc_trx/TransactionId.h" +#include "bc_trx/AbstractUtxo.h" #include "bc_base/BalanceUnit.h" #include "bc_base/BinaryUtils.h" @@ -14,8 +17,7 @@ #include "crypto/Sha256.h" -#include "bc_trx/TransactionId.h" -#include "bc_trx/AbstractUtxo.h" + #include "base_timestamp/SystemTimestamp.h" @@ -125,10 +127,14 @@ void NopInterChainCommunicationTransaction::build() { } void NopInterChainCommunicationTransaction::setUtxoNonce() noexcept { - int capacity = sizeof(uint8_t) + this->timestamp->binarySize(); + BinaryUtils::checkNotNull(this->timestamp); + BinaryUtils::checkNotNull(this->version); + + int capacity = sizeof(uint8_t) + this->version->binarySize() + this->timestamp->binarySize(); ByteBuffer* buff = ByteBuffer::allocateWithEndian(capacity, true); __STP(buff); buff->put(getType()); + this->version->toBinary(buff); this->timestamp->toBinary(buff); diff --git a/src_blockchain/bc_trx/TransactionVersion.cpp b/src_blockchain/bc_trx/TransactionVersion.cpp new file mode 100644 index 0000000..f92305a --- /dev/null +++ b/src_blockchain/bc_trx/TransactionVersion.cpp @@ -0,0 +1,35 @@ +/* + * TransactionVersion.cpp + * + * Created on: May 6, 2026 + * Author: iizuka + */ + +#include "bc_trx/TransactionVersion.h" + +#include "base_io/ByteBuffer.h" + + +namespace codablecash { + +TransactionVersion::TransactionVersion(const TransactionVersion &inst) : SoftwareVersion(inst.major, inst.minor, inst.patch) { + +} + +TransactionVersion::TransactionVersion(int major, int minor, int patch) : SoftwareVersion(major, minor, patch) { + +} + +TransactionVersion::~TransactionVersion() { + +} + +TransactionVersion* TransactionVersion::createFromBinary(ByteBuffer *in) { + uint8_t major = in->get(); + uint8_t minor = in->get(); + uint8_t pathch = in->get(); + + return new TransactionVersion(major, minor, pathch); +} + +} /* namespace codablecash */ diff --git a/src_blockchain/bc_trx/TransactionVersion.h b/src_blockchain/bc_trx/TransactionVersion.h new file mode 100644 index 0000000..e6ccef5 --- /dev/null +++ b/src_blockchain/bc_trx/TransactionVersion.h @@ -0,0 +1,26 @@ +/* + * TransactionVersion.h + * + * Created on: May 6, 2026 + * Author: iizuka + */ + +#ifndef BC_TRX_TRANSACTIONVERSION_H_ +#define BC_TRX_TRANSACTIONVERSION_H_ + +#include "bc/SoftwareVersion.h" + +namespace codablecash { + +class TransactionVersion : public SoftwareVersion { +public: + TransactionVersion(const TransactionVersion& inst); + TransactionVersion(int major, int minor, int patch); + virtual ~TransactionVersion(); + + static TransactionVersion* createFromBinary(ByteBuffer* in); +}; + +} /* namespace codablecash */ + +#endif /* BC_TRX_TRANSACTIONVERSION_H_ */ diff --git a/src_blockchain/bc_trx_balance/BalanceTransferTransaction.cpp b/src_blockchain/bc_trx_balance/BalanceTransferTransaction.cpp index 2c9b599..99aca6d 100644 --- a/src_blockchain/bc_trx_balance/BalanceTransferTransaction.cpp +++ b/src_blockchain/bc_trx_balance/BalanceTransferTransaction.cpp @@ -28,6 +28,7 @@ #include "bc_base/AddressDescriptor.h" +#include "bc_trx/TransactionVersion.h" namespace codablecash { @@ -71,10 +72,11 @@ int BalanceTransferTransaction::binarySize() const { } int BalanceTransferTransaction::__binarySize() const { + BinaryUtils::checkNotNull(this->version); BinaryUtils::checkNotNull(this->timestamp); int total = sizeof(uint8_t); - + total += this->version->binarySize(); total += this->timestamp->binarySize(); total += this->inputs->binarySize(); @@ -105,10 +107,11 @@ void BalanceTransferTransaction::toBinary(ByteBuffer *out) const { } void BalanceTransferTransaction::__toBinary(ByteBuffer *out) const { + BinaryUtils::checkNotNull(this->version); BinaryUtils::checkNotNull(this->timestamp); out->put(getType()); - + this->version->toBinary(out); this->timestamp->toBinary(out); this->inputs->toBinary(out); @@ -125,7 +128,10 @@ void BalanceTransferTransaction::__toBinary(ByteBuffer *out) const { } void BalanceTransferTransaction::fromBinary(ByteBuffer *in) { - delete this->timestamp; + delete this->version, this->version = nullptr; + this->version = TransactionVersion::createFromBinary(in); + + delete this->timestamp, this->timestamp = nullptr; this->timestamp = SystemTimestamp::fromBinary(in); delete this->inputs; @@ -217,10 +223,11 @@ void BalanceTransferTransaction::build() { } void BalanceTransferTransaction::setUtxoNonce() noexcept { - int capacity = sizeof(uint8_t) + this->timestamp->binarySize() + this->inputs->binarySize(); + int capacity = sizeof(uint8_t) + this->version->binarySize() + this->timestamp->binarySize() + this->inputs->binarySize(); ByteBuffer* buff = ByteBuffer::allocateWithEndian(capacity, true); __STP(buff); buff->put(getType()); + this->version->toBinary(buff); this->timestamp->toBinary(buff); this->inputs->toBinary(buff); diff --git a/src_blockchain/bc_trx_genesis/GenesisTransaction.cpp b/src_blockchain/bc_trx_genesis/GenesisTransaction.cpp index 71e53a2..9e5b1b4 100644 --- a/src_blockchain/bc_trx_genesis/GenesisTransaction.cpp +++ b/src_blockchain/bc_trx_genesis/GenesisTransaction.cpp @@ -18,6 +18,8 @@ #include "bc_trx/TransactionId.h" #include "bc_base/BinaryUtils.h" + +#include "bc_trx/TransactionVersion.h" namespace codablecash { GenesisTransaction::GenesisTransaction(const GenesisTransaction &inst) @@ -44,9 +46,11 @@ void GenesisTransaction::addBalanceUtxo(const BalanceUtxo *utxo) noexcept { } int GenesisTransaction::binarySize() const { + BinaryUtils::checkNotNull(this->version); BinaryUtils::checkNotNull(this->timestamp); int total = sizeof(uint8_t); + total += this->version->binarySize(); total += this->timestamp->binarySize(); total += sizeof(uint16_t); @@ -61,9 +65,11 @@ int GenesisTransaction::binarySize() const { } void GenesisTransaction::toBinary(ByteBuffer *out) const { + BinaryUtils::checkNotNull(this->version); BinaryUtils::checkNotNull(this->timestamp); out->put(getType()); + this->version->toBinary(out); this->timestamp->toBinary(out); int maxLoop = this->list.size(); @@ -76,6 +82,9 @@ void GenesisTransaction::toBinary(ByteBuffer *out) const { } void GenesisTransaction::fromBinary(ByteBuffer *in) { + delete this->version, this->version = nullptr; + this->version = TransactionVersion::createFromBinary(in); + delete this->timestamp; this->timestamp = SystemTimestamp::fromBinary(in); @@ -124,11 +133,13 @@ void GenesisTransaction::build() { } void GenesisTransaction::setUtxoNonce() noexcept { + BinaryUtils::checkNotNull(this->version); BinaryUtils::checkNotNull(this->timestamp); - int capacity = sizeof(uint8_t) + this->timestamp->binarySize(); + int capacity = sizeof(uint8_t) + this->version->binarySize() + this->timestamp->binarySize(); ByteBuffer* buff = ByteBuffer::allocateWithEndian(capacity, true); __STP(buff); buff->put(getType()); + this->version->toBinary(buff); this->timestamp->toBinary(buff); ByteBuffer* sha = Sha256::sha256(buff, true); __STP(sha); diff --git a/src_blockchain/pow_pool/Pool2ClientTransferCommandMessage.cpp b/src_blockchain/pow_pool/Pool2ClientTransferCommandMessage.cpp index 5a9d8d1..46cd63b 100644 --- a/src_blockchain/pow_pool/Pool2ClientTransferCommandMessage.cpp +++ b/src_blockchain/pow_pool/Pool2ClientTransferCommandMessage.cpp @@ -25,6 +25,10 @@ #include "base/StackRelease.h" #include "bc/ISystemLogger.h" +#include "bc/ExceptionThrower.h" + +#include "bc_p2p/BlockchainNodeHandshakeException.h" + namespace codablecash { @@ -48,6 +52,9 @@ void Pool2ClientTransferCommandMessage::execute(ICommandParameter *param) { P2pHandshake* handshake = conManager->getP2pHandshake(this->pusubId); StackRawHandshakeReleaser __releaser(handshake); + // exception handshake + ExceptionThrower::throwExceptionIfCondition(handshake == nullptr, L"Node connection has alrealy closed.", __FILE__, __LINE__); + AbstractCommandResponse* response = handshake->publishCommand(this->command); __STP(response); if(response != nullptr){ UnicodeString* message = response->toString(); __STP(message); diff --git a/src_blockchain/pow_pool_client/PoWClientMainThread.cpp b/src_blockchain/pow_pool_client/PoWClientMainThread.cpp index 201fb03..09b3136 100644 --- a/src_blockchain/pow_pool_client/PoWClientMainThread.cpp +++ b/src_blockchain/pow_pool_client/PoWClientMainThread.cpp @@ -26,7 +26,6 @@ #include "ipconnect/UnexpectedProtocolException.h" #include "pow_pool_client_cmd/PoWPoolCheckDataCommand.h" - #include "pow_pool_client_cmd/PoWPoolCheckDataCommandResponse.h" #include "base/StackRelease.h" @@ -76,7 +75,13 @@ void PoWClientMainThread::mainProcess() { // calculate use PoWWorkerClient#start if(request != nullptr && !request->isWaiting()){ - calculate(request); + try{ + calculate(request); + } + catch(Exception* e){ + this->logger->logException(e); + delete e; + } } } } @@ -128,9 +133,12 @@ bool PoWClientMainThread::getMainStatus() { PoWPoolStatusCommandResponse* poolStatusRes = dynamic_cast(res); ExceptionThrower::throwExceptionIfCondition(poolStatusRes == nullptr, L"Unexpected response comes from server.", __FILE__, __LINE__); - PoWRequestStatusData* data = poolStatusRes->getPoWRequestStatusData(); - bool waiting = data->isWaiting(); + + UnicodeString _str(L"data"); + this->logger->debugLog(ISystemLogger::DEBUG_POOL_TRANSFER_RESPONSE, &_str, __FILE__, __LINE__); + + bool waiting = data != nullptr ? data->isWaiting() : true; return !waiting; } diff --git a/src_blockchain_p2p/bc_p2p_processor/NetworkTransferNodeCommand.cpp b/src_blockchain_p2p/bc_p2p_processor/NetworkTransferNodeCommand.cpp index d726b76..5f04e5b 100644 --- a/src_blockchain_p2p/bc_p2p_processor/NetworkTransferNodeCommand.cpp +++ b/src_blockchain_p2p/bc_p2p_processor/NetworkTransferNodeCommand.cpp @@ -14,6 +14,7 @@ #include "bc_p2p/BlochchainP2pManager.h" #include "bc_p2p/StackHandshakeReleaser.h" #include "bc_p2p/BlockchainNodeHandshake.h" +#include "bc_p2p/BlockchainNodeHandshakeException.h" #include "bc_p2p_processor/NetworkTransferNodeCommand.h" @@ -23,6 +24,9 @@ #include "bc/ISystemLogger.h" +#include "bc/ExceptionThrower.h" + + namespace codablecash { NetworkTransferNodeCommand::NetworkTransferNodeCommand(const NodeIdentifier *nodeId, const AbstractNodeCommand *command) @@ -45,6 +49,9 @@ void NetworkTransferNodeCommand::execute(ICommandParameter *param) { BlockchainNodeHandshake* handshake = p2pManager->getNodeHandshakeByNodeId(this->nodeId); StackHandshakeReleaser __releaser(handshake); + // exception handshake + ExceptionThrower::throwExceptionIfCondition(handshake == nullptr, L"Node connection has alrealy closed.", __FILE__, __LINE__); + AbstractCommandResponse* response = handshake->sendCommnad(this->command); __STP(response); if(response != nullptr){ UnicodeString* message = response->toString(); __STP(message); diff --git a/src_gen/alinous_lang/AlinousLang.cc b/src_gen/alinous_lang/AlinousLang.cc index ecd6739..ae6e106 100644 --- a/src_gen/alinous_lang/AlinousLang.cc +++ b/src_gen/alinous_lang/AlinousLang.cc @@ -261,7 +261,7 @@ clazz = new ClassDeclare(); __clazz.reset(clazz); cls = jj_consume_token(CLASS_INTERFACE); } if (!hasError) { -clazz = new ClassDeclare(); +clazz = new ClassDeclare(); __clazz.reset(clazz); clazz->setInterface(true); } break; @@ -289,7 +289,7 @@ gclazz = new GenericsClassDeclare(); gclazz->setName(new UnicodeString(clazz->getName())); // copy class name delete clazz; - clazz = gclazz; + clazz = gclazz; __clazz.reset(clazz); } if (!hasError) { name = jj_consume_token(IDENTIFIER); @@ -1071,7 +1071,9 @@ assert(false); } -ObjectType * AlinousLang::objectType() {ObjectType* dec = new ObjectType(); __STP(dec); +ObjectType * AlinousLang::objectType() {StackRelease __dec; + ObjectType* dec = new ObjectType(); __dec.reset(dec); + PackageNameDeclare* packageName = nullptr; Token* t=nullptr; GenericsObjectType* geneticsObject = nullptr; @@ -1120,7 +1122,7 @@ dec->setName(_STR(t)); if (!hasError) { geneticsObject = new GenericsObjectType(dec); delete dec; - dec = geneticsObject; + dec = geneticsObject; __dec.reset(dec); } if (!hasError) { genericsType = typeDeclare(); @@ -1164,7 +1166,7 @@ geneticsObject->setPosition(t); ; } } -return __STP_MV(dec); +return __dec.move(); assert(false); } @@ -1375,12 +1377,14 @@ std::exception_ptr p = std::current_exception(); try{ std::rethrow_exception(p); }catch(ParseException* e){ - if(e != nullptr){ - delete e; - } + delete e; } + + StatementRepairSkipper skipper(this); + skipper.recoverStatement(); } } +return nullptr; assert(false); } @@ -1459,8 +1463,7 @@ AbstractStatement * AlinousLang::substitutionStatement() {Abstra if (!hasError) { stmt->setPosition(t); } -__ONERROR(stmt); - return stmt; +return stmt; assert(false); } @@ -1639,8 +1642,10 @@ block->setPosition(t); stmt = statement(); } if (!hasError) { -block->addStatement(stmt); - block->setPosition(stmt); +if(stmt != nullptr){ + block->addStatement(stmt); + block->setPosition(stmt); + } } } end_label_13: ; @@ -1880,69 +1885,96 @@ assert(false); } -ForStatement * AlinousLang::forStatement() {ForStatement* stmt = new ForStatement(); __STP(stmt); +AbstractStatement * AlinousLang::forStatement() {StackRelease __stmt; + ForStatement* stmt = new ForStatement(); __stmt.reset(stmt); + + AbstractStatement* ret = nullptr; + StackRelease __ret; + AbstractExpression* exp = nullptr; AbstractStatement* st = nullptr; Token* t = nullptr; if (!hasError) { - t = jj_consume_token(FOR); - } - if (!hasError) { + try { + if (!hasError) { + t = jj_consume_token(FOR); + } + if (!hasError) { stmt->setPosition(t); - } - if (!hasError) { - t = jj_consume_token(L_PARENTHESIS); - } - if (!hasError) { + } + if (!hasError) { + t = jj_consume_token(L_PARENTHESIS); + } + if (!hasError) { stmt->setPosition(t); - } - if (!hasError) { - st = forInnerStatement(); - } - if (!hasError) { + } + if (!hasError) { + st = forInnerStatement(); + } + if (!hasError) { stmt->setInit(st); - stmt->setPosition(st); - } - if (!hasError) { - t = jj_consume_token(SEMI_COLON); - } - if (!hasError) { + stmt->setPosition(st); + } + if (!hasError) { + t = jj_consume_token(SEMI_COLON); + } + if (!hasError) { stmt->setPosition(t); - } - if (!hasError) { - exp = expression(); - } - if (!hasError) { + } + if (!hasError) { + exp = expression(); + } + if (!hasError) { stmt->setCondition(exp); - stmt->setPosition(exp); - } - if (!hasError) { - t = jj_consume_token(SEMI_COLON); - } - if (!hasError) { + stmt->setPosition(exp); + } + if (!hasError) { + t = jj_consume_token(SEMI_COLON); + } + if (!hasError) { stmt->setPosition(t); - } - if (!hasError) { - st = forInnerStatement(); - } - if (!hasError) { + } + if (!hasError) { + st = forInnerStatement(); + } + if (!hasError) { stmt->setPostLoop(st); - stmt->setPosition(st); - } - if (!hasError) { - t = jj_consume_token(R_PARENTHESIS); - } - if (!hasError) { + stmt->setPosition(st); + } + if (!hasError) { + t = jj_consume_token(R_PARENTHESIS); + } + if (!hasError) { stmt->setPosition(t); + } + if (!hasError) { +ret = __stmt.move(); __ret.reset(ret); + } + } catch ( ...) { +std::exception_ptr p = std::current_exception(); + try{ + std::rethrow_exception(p); + }catch(ParseException* e){ + delete e; + } + + StatementRepairSkipper skipper(this); + skipper.recoverForStatement(); + } } if (!hasError) { st = statement(); } if (!hasError) { -stmt->setStatement(st); - stmt->setPosition(st); +if(ret != nullptr){ + stmt->setStatement(st); + stmt->setPosition(st); + } + else { + ret = st; __ret.reset(st); + } } -return __STP_MV(stmt); +return __ret.move(); assert(false); } @@ -1996,8 +2028,10 @@ stmt->setPosition(t); st = statement(); } if (!hasError) { -stmt->setStatement(st); - stmt->setPosition(st); +if(st != nullptr){ + stmt->setStatement(st); + stmt->setPosition(st); + } } if (!hasError) { t = jj_consume_token(WHILE); @@ -2231,8 +2265,10 @@ ifstmt->setExpression(exp); stmt = statement(); } if (!hasError) { -ifstmt->setStatement(stmt); - ifstmt->setPosition(stmt); +if(stmt != nullptr){ + ifstmt->setStatement(stmt); + ifstmt->setPosition(stmt); + } } if (!hasError) { while (!hasError) { @@ -2263,8 +2299,10 @@ ifstmt->setPosition(t); stmt = statement(); } if (!hasError) { -ifstmt->setElseStatement(stmt); - ifstmt->setPosition(stmt); +if(stmt != nullptr){ + ifstmt->setElseStatement(stmt); + ifstmt->setPosition(stmt); + } } } else { ; @@ -2314,8 +2352,10 @@ ifstmt->setPosition(t); stmt = statement(); } if (!hasError) { -ifstmt->setStatement(stmt); - ifstmt->setPosition(stmt); +if(stmt != nullptr){ + ifstmt->setStatement(stmt); + ifstmt->setPosition(stmt); + } } return __STP_MV(ifstmt); assert(false); @@ -2581,10 +2621,10 @@ __left.reset(left); } if (!hasError) { if(exp == nullptr){ - exp = new AndExpression(); + exp = new AndExpression(); __STP(exp); exp->setPosition(left); exp->addExp(left); - left = exp; __left.reset(left); + left = __STP_MV(exp); __left.reset(left); } exp->setPosition(t); @@ -2630,10 +2670,10 @@ __left.reset(left); t = jj_consume_token(CMP_EQUALS); } if (!hasError) { -exp = new EqualityExpression(); +exp = new EqualityExpression(); __STP(exp); exp->setPosition(left); exp->setLeft(left); - left = exp; + left = __STP_MV(exp); __left.reset(left); exp->setPosition(t); exp->setOp(EqualityExpression::EQ); @@ -3008,7 +3048,7 @@ if(exp == nullptr){ exp = new MultiplicativeExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->addOpe(MultiplicativeExpression::DIV); exp->setPosition(t); diff --git a/src_gen/alinous_lang/AlinousLang.h b/src_gen/alinous_lang/AlinousLang.h index f3f6fa7..10dc534 100644 --- a/src_gen/alinous_lang/AlinousLang.h +++ b/src_gen/alinous_lang/AlinousLang.h @@ -61,7 +61,7 @@ TryStatement * tryStatement(); FinallyStatement * finallyStatement(); CatchStatement * catchStatement(); ThrowStatement * throwStatement(); -ForStatement * forStatement(); +AbstractStatement * forStatement(); AbstractStatement * forInnerStatement(); DoWhileStatement * doWhileStatement(); WhileStatement * whileStatement(); @@ -379,43 +379,14 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); { jj_save(23, xla); } } - inline bool jj_3R_158() - { - if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_163()) { - jj_scanpos = xsp; - if (jj_3R_164()) return true; - } - return false; - } - - inline bool jj_3R_262() - { - if (jj_done) return true; - if (jj_3R_59()) return true; - return false; - } - - inline bool jj_3R_176() - { - if (jj_done) return true; - if (jj_scan_token(FROM)) return true; - return false; - } - - inline bool jj_3R_64() + inline bool jj_3_12() { if (jj_done) return true; Token * xsp; xsp = jj_scanpos; - if (jj_3R_81()) { - jj_scanpos = xsp; - if (jj_3R_82()) { + if (jj_3R_57()) { jj_scanpos = xsp; - if (jj_3R_83()) return true; - } + if (jj_3R_58()) return true; } return false; } @@ -447,129 +418,6 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3_8() - { - if (jj_done) return true; - if (jj_3R_51()) return true; - return false; - } - - inline bool jj_3R_135() - { - if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_158()) jj_scanpos = xsp; - if (jj_3R_159()) return true; - return false; - } - - inline bool jj_3R_260() - { - if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_262()) jj_scanpos = xsp; - return false; - } - - inline bool jj_3R_167() - { - if (jj_done) return true; - if (jj_3R_172()) return true; - Token * xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_174()) { jj_scanpos = xsp; break; } - } - return false; - } - - inline bool jj_3R_58() - { - if (jj_done) return true; - if (jj_scan_token(PLUSPLUS)) return true; - return false; - } - - inline bool jj_3R_47() - { - if (jj_done) return true; - if (jj_scan_token(STATIC)) return true; - return false; - } - - inline bool jj_3_2() - { - if (jj_done) return true; - if (jj_3R_46()) return true; - return false; - } - - inline bool jj_3R_113() - { - if (jj_done) return true; - if (jj_scan_token(VAR)) return true; - return false; - } - - inline bool jj_3R_214() - { - if (jj_done) return true; - if (jj_scan_token(L_PARENTHESIS)) return true; - return false; - } - - inline bool jj_3R_57() - { - if (jj_done) return true; - if (jj_scan_token(MINUSMINUS)) return true; - return false; - } - - inline bool jj_3R_257() - { - if (jj_done) return true; - if (jj_scan_token(L_PARENTHESIS)) return true; - if (jj_3R_260()) return true; - if (jj_scan_token(R_PARENTHESIS)) return true; - return false; - } - - inline bool jj_3R_168() - { - if (jj_done) return true; - if (jj_3R_173()) return true; - return false; - } - - inline bool jj_3R_169() - { - if (jj_done) return true; - if (jj_scan_token(191)) return true; - if (jj_3R_167()) return true; - return false; - } - - inline bool jj_3R_112() - { - if (jj_done) return true; - if (jj_scan_token(VOID)) return true; - return false; - } - - inline bool jj_3_12() - { - if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_57()) { - jj_scanpos = xsp; - if (jj_3R_58()) return true; - } - return false; - } - inline bool jj_3R_160() { if (jj_done) return true; @@ -582,15 +430,11 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3_3() + inline bool jj_3R_157() { if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_47()) jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_3_2()) jj_scanpos = xsp; - if (jj_3R_48()) return true; + if (jj_scan_token(SELECT)) return true; + if (jj_3R_178()) return true; return false; } @@ -604,21 +448,6 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_157() - { - if (jj_done) return true; - if (jj_scan_token(SELECT)) return true; - if (jj_3R_178()) return true; - return false; - } - - inline bool jj_3R_111() - { - if (jj_done) return true; - if (jj_scan_token(STRING)) return true; - return false; - } - inline bool jj_3R_154() { if (jj_done) return true; @@ -627,14 +456,6 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_147() - { - if (jj_done) return true; - if (jj_scan_token(FOR)) return true; - if (jj_scan_token(L_PARENTHESIS)) return true; - return false; - } - inline bool jj_3_16() { if (jj_done) return true; @@ -689,17 +510,24 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_110() + inline bool jj_3R_130() { if (jj_done) return true; - if (jj_scan_token(LONG)) return true; + if (jj_3R_153()) return true; return false; } - inline bool jj_3R_130() + inline bool jj_3R_47() { if (jj_done) return true; - if (jj_3R_153()) return true; + if (jj_scan_token(STATIC)) return true; + return false; + } + + inline bool jj_3R_113() + { + if (jj_done) return true; + if (jj_scan_token(VAR)) return true; return false; } @@ -717,6 +545,13 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } + inline bool jj_3_2() + { + if (jj_done) return true; + if (jj_3R_46()) return true; + return false; + } + inline bool jj_3R_100() { if (jj_done) return true; @@ -773,18 +608,10 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_109() - { - if (jj_done) return true; - if (jj_scan_token(INT)) return true; - return false; - } - - inline bool jj_3R_139() + inline bool jj_3R_112() { if (jj_done) return true; - if (jj_scan_token(THROW)) return true; - if (jj_3R_59()) return true; + if (jj_scan_token(VOID)) return true; return false; } @@ -805,6 +632,14 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } + inline bool jj_3R_147() + { + if (jj_done) return true; + if (jj_scan_token(FOR)) return true; + if (jj_scan_token(L_PARENTHESIS)) return true; + return false; + } + inline bool jj_3R_136() { if (jj_done) return true; @@ -824,10 +659,22 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_108() + inline bool jj_3_3() { if (jj_done) return true; - if (jj_scan_token(SHORT)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_47()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3_2()) jj_scanpos = xsp; + if (jj_3R_48()) return true; + return false; + } + + inline bool jj_3R_111() + { + if (jj_done) return true; + if (jj_scan_token(STRING)) return true; return false; } @@ -852,18 +699,18 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_107() + inline bool jj_3R_149() { if (jj_done) return true; - if (jj_scan_token(CHAR)) return true; + if (jj_scan_token(DROP)) return true; + if (jj_scan_token(TABLE)) return true; return false; } - inline bool jj_3R_149() + inline bool jj_3R_110() { if (jj_done) return true; - if (jj_scan_token(DROP)) return true; - if (jj_scan_token(TABLE)) return true; + if (jj_scan_token(LONG)) return true; return false; } @@ -903,6 +750,14 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } + inline bool jj_3R_139() + { + if (jj_done) return true; + if (jj_scan_token(THROW)) return true; + if (jj_3R_59()) return true; + return false; + } + inline bool jj_3R_221() { if (jj_done) return true; @@ -931,17 +786,17 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_106() + inline bool jj_3R_137() { if (jj_done) return true; - if (jj_scan_token(BYTE)) return true; + if (jj_3R_161()) return true; return false; } - inline bool jj_3R_137() + inline bool jj_3R_109() { if (jj_done) return true; - if (jj_3R_161()) return true; + if (jj_scan_token(INT)) return true; return false; } @@ -1011,10 +866,10 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_105() + inline bool jj_3R_108() { if (jj_done) return true; - if (jj_scan_token(BOOLEAN)) return true; + if (jj_scan_token(SHORT)) return true; return false; } @@ -1050,6 +905,13 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } + inline bool jj_3R_107() + { + if (jj_done) return true; + if (jj_scan_token(CHAR)) return true; + return false; + } + inline bool jj_3R_66() { if (jj_done) return true; @@ -1093,6 +955,13 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } + inline bool jj_3R_106() + { + if (jj_done) return true; + if (jj_scan_token(BYTE)) return true; + return false; + } + inline bool jj_3R_103() { if (jj_done) return true; @@ -1119,22 +988,6 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_140() - { - if (jj_done) return true; - if (jj_scan_token(TRY)) return true; - if (jj_3R_49()) return true; - return false; - } - - inline bool jj_3_5() - { - if (jj_done) return true; - if (jj_scan_token(LT)) return true; - if (jj_3R_46()) return true; - return false; - } - inline bool jj_3R_54() { if (jj_done) return true; @@ -1142,31 +995,17 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_212() - { - if (jj_done) return true; - if (jj_scan_token(_NULL)) return true; - return false; - } - - inline bool jj_3R_124() - { - if (jj_done) return true; - if (jj_3R_147()) return true; - return false; - } - - inline bool jj_3R_123() + inline bool jj_3R_105() { if (jj_done) return true; - if (jj_3R_146()) return true; + if (jj_scan_token(BOOLEAN)) return true; return false; } - inline bool jj_3R_122() + inline bool jj_3R_212() { if (jj_done) return true; - if (jj_3R_145()) return true; + if (jj_scan_token(_NULL)) return true; return false; } @@ -1179,13 +1018,6 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_121() - { - if (jj_done) return true; - if (jj_3R_144()) return true; - return false; - } - inline bool jj_3R_208() { if (jj_done) return true; @@ -1193,13 +1025,6 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_120() - { - if (jj_done) return true; - if (jj_3R_143()) return true; - return false; - } - inline bool jj_3R_207() { if (jj_done) return true; @@ -1207,20 +1032,6 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_119() - { - if (jj_done) return true; - if (jj_3R_142()) return true; - return false; - } - - inline bool jj_3R_118() - { - if (jj_done) return true; - if (jj_3R_141()) return true; - return false; - } - inline bool jj_3R_61() { if (jj_done) return true; @@ -1238,14 +1049,7 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); inline bool jj_3R_206() { if (jj_done) return true; - if (jj_3R_215()) return true; - return false; - } - - inline bool jj_3R_117() - { - if (jj_done) return true; - if (jj_3R_140()) return true; + if (jj_3R_215()) return true; return false; } @@ -1266,13 +1070,6 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_116() - { - if (jj_done) return true; - if (jj_3R_139()) return true; - return false; - } - inline bool jj_3R_59() { if (jj_done) return true; @@ -1301,28 +1098,6 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3_4() - { - if (jj_done) return true; - if (jj_scan_token(IDENTIFIER)) return true; - if (jj_scan_token(DOT)) return true; - return false; - } - - inline bool jj_3R_114() - { - if (jj_done) return true; - Token * xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3_4()) { jj_scanpos = xsp; break; } - } - if (jj_scan_token(IDENTIFIER)) return true; - xsp = jj_scanpos; - if (jj_3_5()) jj_scanpos = xsp; - return false; - } - inline bool jj_3_11() { if (jj_done) return true; @@ -1336,39 +1111,6 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_96() - { - if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_116()) { - jj_scanpos = xsp; - if (jj_3R_117()) { - jj_scanpos = xsp; - if (jj_3R_118()) { - jj_scanpos = xsp; - if (jj_3R_119()) { - jj_scanpos = xsp; - if (jj_3R_120()) { - jj_scanpos = xsp; - if (jj_3R_121()) { - jj_scanpos = xsp; - if (jj_3R_122()) { - jj_scanpos = xsp; - if (jj_3R_123()) { - jj_scanpos = xsp; - if (jj_3R_124()) return true; - } - } - } - } - } - } - } - } - return false; - } - inline bool jj_3R_193() { if (jj_done) return true; @@ -1411,20 +1153,6 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_94() - { - if (jj_done) return true; - if (jj_3R_114()) return true; - return false; - } - - inline bool jj_3R_93() - { - if (jj_done) return true; - if (jj_3R_113()) return true; - return false; - } - inline bool jj_3R_259() { if (jj_done) return true; @@ -1440,24 +1168,11 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_92() - { - if (jj_done) return true; - if (jj_3R_112()) return true; - return false; - } - - inline bool jj_3R_91() - { - if (jj_done) return true; - if (jj_3R_111()) return true; - return false; - } - - inline bool jj_3R_90() + inline bool jj_3R_140() { if (jj_done) return true; - if (jj_3R_110()) return true; + if (jj_scan_token(TRY)) return true; + if (jj_3R_49()) return true; return false; } @@ -1476,31 +1191,25 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_89() - { - if (jj_done) return true; - if (jj_3R_109()) return true; - return false; - } - - inline bool jj_3R_88() + inline bool jj_3_5() { if (jj_done) return true; - if (jj_3R_108()) return true; + if (jj_scan_token(LT)) return true; + if (jj_3R_46()) return true; return false; } - inline bool jj_3R_87() + inline bool jj_3R_210() { if (jj_done) return true; - if (jj_3R_107()) return true; + if (jj_scan_token(RSIGNEDSHIFT)) return true; return false; } - inline bool jj_3R_210() + inline bool jj_3R_124() { if (jj_done) return true; - if (jj_scan_token(RSIGNEDSHIFT)) return true; + if (jj_3R_147()) return true; return false; } @@ -1511,10 +1220,10 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_86() + inline bool jj_3R_123() { if (jj_done) return true; - if (jj_3R_106()) return true; + if (jj_3R_146()) return true; return false; } @@ -1539,11 +1248,10 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_52() + inline bool jj_3R_122() { if (jj_done) return true; - if (jj_scan_token(ELSE)) return true; - if (jj_scan_token(IF)) return true; + if (jj_3R_145()) return true; return false; } @@ -1563,10 +1271,39 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_85() + inline bool jj_3R_121() { if (jj_done) return true; - if (jj_3R_105()) return true; + if (jj_3R_144()) return true; + return false; + } + + inline bool jj_3R_120() + { + if (jj_done) return true; + if (jj_3R_143()) return true; + return false; + } + + inline bool jj_3R_52() + { + if (jj_done) return true; + if (jj_scan_token(ELSE)) return true; + if (jj_scan_token(IF)) return true; + return false; + } + + inline bool jj_3R_119() + { + if (jj_done) return true; + if (jj_3R_142()) return true; + return false; + } + + inline bool jj_3R_118() + { + if (jj_done) return true; + if (jj_3R_141()) return true; return false; } @@ -1589,6 +1326,20 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } + inline bool jj_3R_117() + { + if (jj_done) return true; + if (jj_3R_140()) return true; + return false; + } + + inline bool jj_3R_116() + { + if (jj_done) return true; + if (jj_3R_139()) return true; + return false; + } + inline bool jj_3R_98() { if (jj_done) return true; @@ -1611,42 +1362,6 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_67() - { - if (jj_done) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_85()) { - jj_scanpos = xsp; - if (jj_3R_86()) { - jj_scanpos = xsp; - if (jj_3R_87()) { - jj_scanpos = xsp; - if (jj_3R_88()) { - jj_scanpos = xsp; - if (jj_3R_89()) { - jj_scanpos = xsp; - if (jj_3R_90()) { - jj_scanpos = xsp; - if (jj_3R_91()) { - jj_scanpos = xsp; - if (jj_3R_92()) { - jj_scanpos = xsp; - if (jj_3R_93()) { - jj_scanpos = xsp; - if (jj_3R_94()) return true; - } - } - } - } - } - } - } - } - } - return false; - } - inline bool jj_3R_156() { if (jj_done) return true; @@ -1680,18 +1395,58 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_69() + inline bool jj_3_4() { if (jj_done) return true; - if (jj_3R_53()) return true; + if (jj_scan_token(IDENTIFIER)) return true; + if (jj_scan_token(DOT)) return true; return false; } - inline bool jj_3R_68() + inline bool jj_3R_96() { if (jj_done) return true; - if (jj_scan_token(L_BRACKET)) return true; - if (jj_scan_token(R_BRACKET)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_116()) { + jj_scanpos = xsp; + if (jj_3R_117()) { + jj_scanpos = xsp; + if (jj_3R_118()) { + jj_scanpos = xsp; + if (jj_3R_119()) { + jj_scanpos = xsp; + if (jj_3R_120()) { + jj_scanpos = xsp; + if (jj_3R_121()) { + jj_scanpos = xsp; + if (jj_3R_122()) { + jj_scanpos = xsp; + if (jj_3R_123()) { + jj_scanpos = xsp; + if (jj_3R_124()) return true; + } + } + } + } + } + } + } + } + return false; + } + + inline bool jj_3R_114() + { + if (jj_done) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3_4()) { jj_scanpos = xsp; break; } + } + if (jj_scan_token(IDENTIFIER)) return true; + xsp = jj_scanpos; + if (jj_3_5()) jj_scanpos = xsp; return false; } @@ -1708,14 +1463,6 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3_10() - { - if (jj_done) return true; - if (jj_scan_token(ELSE)) return true; - if (jj_3R_53()) return true; - return false; - } - inline bool jj_3_17() { if (jj_done) return true; @@ -1731,6 +1478,14 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } + inline bool jj_3_10() + { + if (jj_done) return true; + if (jj_scan_token(ELSE)) return true; + if (jj_3R_53()) return true; + return false; + } + inline bool jj_3R_63() { if (jj_done) return true; @@ -1749,6 +1504,13 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } + inline bool jj_3R_94() + { + if (jj_done) return true; + if (jj_3R_114()) return true; + return false; + } + inline bool jj_3R_247() { if (jj_done) return true; @@ -1764,35 +1526,31 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3_9() + inline bool jj_3R_93() { if (jj_done) return true; - if (jj_3R_52()) return true; + if (jj_3R_113()) return true; return false; } - inline bool jj_3R_46() + inline bool jj_3R_92() { if (jj_done) return true; - if (jj_3R_67()) return true; - Token * xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_68()) { jj_scanpos = xsp; break; } - } + if (jj_3R_112()) return true; return false; } - inline bool jj_3R_49() + inline bool jj_3_9() { if (jj_done) return true; - if (jj_scan_token(L_BRACE)) return true; - Token * xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_69()) { jj_scanpos = xsp; break; } - } - if (jj_scan_token(R_BRACE)) return true; + if (jj_3R_52()) return true; + return false; + } + + inline bool jj_3R_91() + { + if (jj_done) return true; + if (jj_3R_111()) return true; return false; } @@ -1808,6 +1566,13 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } + inline bool jj_3R_90() + { + if (jj_done) return true; + if (jj_3R_110()) return true; + return false; + } + inline bool jj_3R_242() { if (jj_done) return true; @@ -1820,6 +1585,13 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } + inline bool jj_3R_89() + { + if (jj_done) return true; + if (jj_3R_109()) return true; + return false; + } + inline bool jj_3R_187() { if (jj_done) return true; @@ -1827,6 +1599,13 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } + inline bool jj_3R_88() + { + if (jj_done) return true; + if (jj_3R_108()) return true; + return false; + } + inline bool jj_3R_249() { if (jj_done) return true; @@ -1851,18 +1630,24 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_141() + inline bool jj_3R_87() { if (jj_done) return true; - if (jj_scan_token(IF)) return true; - if (jj_scan_token(L_PARENTHESIS)) return true; + if (jj_3R_107()) return true; return false; } - inline bool jj_3R_97() + inline bool jj_3R_86() { if (jj_done) return true; - if (jj_scan_token(SEMI_COLON)) return true; + if (jj_3R_106()) return true; + return false; + } + + inline bool jj_3R_85() + { + if (jj_done) return true; + if (jj_3R_105()) return true; return false; } @@ -1887,6 +1672,14 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } + inline bool jj_3R_141() + { + if (jj_done) return true; + if (jj_scan_token(IF)) return true; + if (jj_scan_token(L_PARENTHESIS)) return true; + return false; + } + inline bool jj_3R_148() { if (jj_done) return true; @@ -1913,6 +1706,49 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } + inline bool jj_3R_67() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_85()) { + jj_scanpos = xsp; + if (jj_3R_86()) { + jj_scanpos = xsp; + if (jj_3R_87()) { + jj_scanpos = xsp; + if (jj_3R_88()) { + jj_scanpos = xsp; + if (jj_3R_89()) { + jj_scanpos = xsp; + if (jj_3R_90()) { + jj_scanpos = xsp; + if (jj_3R_91()) { + jj_scanpos = xsp; + if (jj_3R_92()) { + jj_scanpos = xsp; + if (jj_3R_93()) { + jj_scanpos = xsp; + if (jj_3R_94()) return true; + } + } + } + } + } + } + } + } + } + return false; + } + + inline bool jj_3R_69() + { + if (jj_done) return true; + if (jj_3R_53()) return true; + return false; + } + inline bool jj_3_19() { if (jj_done) return true; @@ -1947,19 +1783,24 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_142() + inline bool jj_3R_68() { if (jj_done) return true; - if (jj_scan_token(BREAK)) return true; - if (jj_scan_token(SEMI_COLON)) return true; + if (jj_scan_token(L_BRACKET)) return true; + if (jj_scan_token(R_BRACKET)) return true; return false; } - inline bool jj_3R_70() + inline bool jj_3R_49() { if (jj_done) return true; - if (jj_scan_token(EQUALS)) return true; - if (jj_3R_59()) return true; + if (jj_scan_token(L_BRACE)) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_69()) { jj_scanpos = xsp; break; } + } + if (jj_scan_token(R_BRACE)) return true; return false; } @@ -1970,35 +1811,37 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3_1() + inline bool jj_3R_142() { if (jj_done) return true; - if (jj_scan_token(DOT)) return true; - if (jj_scan_token(IDENTIFIER)) return true; + if (jj_scan_token(BREAK)) return true; + if (jj_scan_token(SEMI_COLON)) return true; return false; } - inline bool jj_3R_248() + inline bool jj_3R_46() { if (jj_done) return true; - if (jj_3R_250()) return true; + if (jj_3R_67()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_68()) { jj_scanpos = xsp; break; } + } return false; } - inline bool jj_3R_241() + inline bool jj_3R_248() { if (jj_done) return true; - if (jj_scan_token(INTEGER_LITERAL)) return true; + if (jj_3R_250()) return true; return false; } - inline bool jj_3R_51() + inline bool jj_3R_241() { if (jj_done) return true; - if (jj_3R_59()) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_70()) jj_scanpos = xsp; + if (jj_scan_token(INTEGER_LITERAL)) return true; return false; } @@ -2009,10 +1852,9 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_143() + inline bool jj_3R_97() { if (jj_done) return true; - if (jj_scan_token(CONTINUE)) return true; if (jj_scan_token(SEMI_COLON)) return true; return false; } @@ -2190,6 +2032,14 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } + inline bool jj_3R_143() + { + if (jj_done) return true; + if (jj_scan_token(CONTINUE)) return true; + if (jj_scan_token(SEMI_COLON)) return true; + return false; + } + inline bool jj_3R_239() { if (jj_done) return true; @@ -2235,13 +2085,6 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_175() - { - if (jj_done) return true; - if (jj_3R_59()) return true; - return false; - } - inline bool jj_3R_200() { if (jj_done) return true; @@ -2277,6 +2120,13 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } + inline bool jj_3R_175() + { + if (jj_done) return true; + if (jj_3R_59()) return true; + return false; + } + inline bool jj_3R_236() { if (jj_done) return true; @@ -2298,14 +2148,6 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_50() - { - if (jj_done) return true; - if (jj_3R_51()) return true; - if (jj_scan_token(SEMI_COLON)) return true; - return false; - } - inline bool jj_3R_180() { if (jj_done) return true; @@ -2316,14 +2158,11 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_144() + inline bool jj_3R_70() { if (jj_done) return true; - if (jj_scan_token(RETURN)) return true; - Token * xsp; - xsp = jj_scanpos; - if (jj_3R_175()) jj_scanpos = xsp; - if (jj_scan_token(SEMI_COLON)) return true; + if (jj_scan_token(EQUALS)) return true; + if (jj_3R_59()) return true; return false; } @@ -2367,6 +2206,17 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } + inline bool jj_3R_144() + { + if (jj_done) return true; + if (jj_scan_token(RETURN)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_175()) jj_scanpos = xsp; + if (jj_scan_token(SEMI_COLON)) return true; + return false; + } + inline bool jj_3R_191() { if (jj_done) return true; @@ -2374,13 +2224,31 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_166() + inline bool jj_3_1() + { + if (jj_done) return true; + if (jj_scan_token(DOT)) return true; + if (jj_scan_token(IDENTIFIER)) return true; + return false; + } + + inline bool jj_3R_166() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_170()) jj_scanpos = xsp; + if (jj_3R_171()) return true; + return false; + } + + inline bool jj_3R_51() { if (jj_done) return true; + if (jj_3R_59()) return true; Token * xsp; xsp = jj_scanpos; - if (jj_3R_170()) jj_scanpos = xsp; - if (jj_3R_171()) return true; + if (jj_3R_70()) jj_scanpos = xsp; return false; } @@ -2540,14 +2408,6 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_115() - { - if (jj_done) return true; - if (jj_3R_46()) return true; - if (jj_3R_84()) return true; - return false; - } - inline bool jj_3R_153() { if (jj_done) return true; @@ -2556,18 +2416,18 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_145() + inline bool jj_3R_165() { if (jj_done) return true; - if (jj_scan_token(WHILE)) return true; - if (jj_scan_token(L_PARENTHESIS)) return true; + if (jj_scan_token(193)) return true; return false; } - inline bool jj_3R_165() + inline bool jj_3R_50() { if (jj_done) return true; - if (jj_scan_token(193)) return true; + if (jj_3R_51()) return true; + if (jj_scan_token(SEMI_COLON)) return true; return false; } @@ -2598,6 +2458,14 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } + inline bool jj_3R_145() + { + if (jj_done) return true; + if (jj_scan_token(WHILE)) return true; + if (jj_scan_token(L_PARENTHESIS)) return true; + return false; + } + inline bool jj_3R_173() { if (jj_done) return true; @@ -2637,13 +2505,6 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_95() - { - if (jj_done) return true; - if (jj_3R_115()) return true; - return false; - } - inline bool jj_3R_172() { if (jj_done) return true; @@ -2673,127 +2534,266 @@ JsonKeyValuePairExpression * jsonKeyValuePair(); return false; } - inline bool jj_3R_75() + inline bool jj_3R_164() { if (jj_done) return true; - if (jj_3R_99()) return true; + if (jj_scan_token(PLUSPLUS)) return true; return false; } - inline bool jj_3R_74() + inline bool jj_3R_232() { if (jj_done) return true; - if (jj_3R_98()) return true; + if (jj_scan_token(L_PARENTHESIS)) return true; + if (jj_3R_59()) return true; + if (jj_scan_token(R_PARENTHESIS)) return true; return false; } - inline bool jj_3R_73() + inline bool jj_3R_83() { if (jj_done) return true; - if (jj_3R_97()) return true; + if (jj_scan_token(CHARACTER_LITERAL)) return true; return false; } - inline bool jj_3R_164() + inline bool jj_3R_151() { if (jj_done) return true; - if (jj_scan_token(PLUSPLUS)) return true; + if (jj_scan_token(BEGIN)) return true; + if (jj_scan_token(SEMI_COLON)) return true; return false; } - inline bool jj_3R_72() + inline bool jj_3R_115() { if (jj_done) return true; - if (jj_3R_96()) return true; + if (jj_3R_46()) return true; + if (jj_3R_84()) return true; return false; } - inline bool jj_3R_232() + inline bool jj_3R_163() { if (jj_done) return true; - if (jj_scan_token(L_PARENTHESIS)) return true; - if (jj_3R_59()) return true; - if (jj_scan_token(R_PARENTHESIS)) return true; + if (jj_scan_token(MINUSMINUS)) return true; return false; } - inline bool jj_3R_71() + inline bool jj_3R_82() { if (jj_done) return true; - if (jj_3R_95()) return true; + if (jj_scan_token(SQL_STRING_LITERAL)) return true; return false; } - inline bool jj_3R_83() + inline bool jj_3R_178() { if (jj_done) return true; - if (jj_scan_token(CHARACTER_LITERAL)) return true; + if (jj_3R_184()) return true; return false; } - inline bool jj_3_7() + inline bool jj_3R_81() { if (jj_done) return true; - if (jj_3R_50()) return true; + if (jj_scan_token(INTEGER_LITERAL)) return true; return false; } - inline bool jj_3_6() + inline bool jj_3R_174() { if (jj_done) return true; - if (jj_3R_49()) return true; + if (jj_scan_token(BIT_AND)) return true; + if (jj_3R_172()) return true; return false; } - inline bool jj_3R_151() + inline bool jj_3R_158() { if (jj_done) return true; - if (jj_scan_token(BEGIN)) return true; - if (jj_scan_token(SEMI_COLON)) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_163()) { + jj_scanpos = xsp; + if (jj_3R_164()) return true; + } return false; } - inline bool jj_3R_163() + inline bool jj_3R_146() { if (jj_done) return true; - if (jj_scan_token(MINUSMINUS)) return true; + if (jj_scan_token(DO)) return true; + if (jj_3R_53()) return true; return false; } - inline bool jj_3R_82() + inline bool jj_3R_262() { if (jj_done) return true; - if (jj_scan_token(SQL_STRING_LITERAL)) return true; + if (jj_3R_59()) return true; return false; } - inline bool jj_3R_178() + inline bool jj_3R_176() { if (jj_done) return true; - if (jj_3R_184()) return true; + if (jj_scan_token(FROM)) return true; return false; } - inline bool jj_3R_146() + inline bool jj_3R_64() { if (jj_done) return true; - if (jj_scan_token(DO)) return true; - if (jj_3R_53()) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_81()) { + jj_scanpos = xsp; + if (jj_3R_82()) { + jj_scanpos = xsp; + if (jj_3R_83()) return true; + } + } return false; } - inline bool jj_3R_81() + inline bool jj_3R_95() { if (jj_done) return true; - if (jj_scan_token(INTEGER_LITERAL)) return true; + if (jj_3R_115()) return true; return false; } - inline bool jj_3R_174() + inline bool jj_3R_135() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_158()) jj_scanpos = xsp; + if (jj_3R_159()) return true; + return false; + } + + inline bool jj_3R_260() + { + if (jj_done) return true; + Token * xsp; + xsp = jj_scanpos; + if (jj_3R_262()) jj_scanpos = xsp; + return false; + } + + inline bool jj_3R_167() { if (jj_done) return true; - if (jj_scan_token(BIT_AND)) return true; if (jj_3R_172()) return true; + Token * xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_174()) { jj_scanpos = xsp; break; } + } + return false; + } + + inline bool jj_3_8() + { + if (jj_done) return true; + if (jj_3R_51()) return true; + return false; + } + + inline bool jj_3R_58() + { + if (jj_done) return true; + if (jj_scan_token(PLUSPLUS)) return true; + return false; + } + + inline bool jj_3R_75() + { + if (jj_done) return true; + if (jj_3R_99()) return true; + return false; + } + + inline bool jj_3R_74() + { + if (jj_done) return true; + if (jj_3R_98()) return true; + return false; + } + + inline bool jj_3R_73() + { + if (jj_done) return true; + if (jj_3R_97()) return true; + return false; + } + + inline bool jj_3R_72() + { + if (jj_done) return true; + if (jj_3R_96()) return true; + return false; + } + + inline bool jj_3R_71() + { + if (jj_done) return true; + if (jj_3R_95()) return true; + return false; + } + + inline bool jj_3R_214() + { + if (jj_done) return true; + if (jj_scan_token(L_PARENTHESIS)) return true; + return false; + } + + inline bool jj_3_7() + { + if (jj_done) return true; + if (jj_3R_50()) return true; + return false; + } + + inline bool jj_3R_57() + { + if (jj_done) return true; + if (jj_scan_token(MINUSMINUS)) return true; + return false; + } + + inline bool jj_3_6() + { + if (jj_done) return true; + if (jj_3R_49()) return true; + return false; + } + + inline bool jj_3R_257() + { + if (jj_done) return true; + if (jj_scan_token(L_PARENTHESIS)) return true; + if (jj_3R_260()) return true; + if (jj_scan_token(R_PARENTHESIS)) return true; + return false; + } + + inline bool jj_3R_168() + { + if (jj_done) return true; + if (jj_3R_173()) return true; + return false; + } + + inline bool jj_3R_169() + { + if (jj_done) return true; + if (jj_scan_token(191)) return true; + if (jj_3R_167()) return true; return false; } diff --git a/src_smartcontract/engine/compiler/CMakeLists.txt b/src_smartcontract/engine/compiler/CMakeLists.txt index b3f17fd..90cfc22 100644 --- a/src_smartcontract/engine/compiler/CMakeLists.txt +++ b/src_smartcontract/engine/compiler/CMakeLists.txt @@ -7,6 +7,7 @@ set(__src ParseErrorHandler.cpp ParserReaderStream.cpp SmartContractParser.cpp + StatementRepairSkipper.cpp ) handle_sub(codablecashlib "${__src}" smartcontract engine/compiler) diff --git a/src_smartcontract/engine/compiler/LexErrorHandler.cpp b/src_smartcontract/engine/compiler/LexErrorHandler.cpp index 28b9a2a..b113924 100644 --- a/src_smartcontract/engine/compiler/LexErrorHandler.cpp +++ b/src_smartcontract/engine/compiler/LexErrorHandler.cpp @@ -9,6 +9,9 @@ #include "engine/compiler/LexError.h" #include "base/UnicodeString.h" +#include "alinous_lang/ParseException.h" + + namespace alinous { LexErrorHandler::LexErrorHandler() { @@ -32,6 +35,8 @@ void LexErrorHandler::lexicalError(bool EOFSeen, int lexState, int errorLine, LexError* er = new LexError(errorAfterStr, endoutedChar, errorLine, errorColumn); this->list.addElement(er); + + throw new ParseException(); } bool LexErrorHandler::hasError() const noexcept { diff --git a/src_smartcontract/engine/compiler/ParseErrorHandler.cpp b/src_smartcontract/engine/compiler/ParseErrorHandler.cpp index 7b3c2d3..18a28f9 100644 --- a/src_smartcontract/engine/compiler/ParseErrorHandler.cpp +++ b/src_smartcontract/engine/compiler/ParseErrorHandler.cpp @@ -31,7 +31,7 @@ ParseErrorHandler::~ParseErrorHandler() { void ParseErrorHandler::handleUnexpectedToken(int expectedKind, const JJString& expectedToken, Token* actual, AlinousLang* parser) { CompileError* error = new CompileError(new UnicodeString(expectedToken.c_str()), new UnicodeString(actual->image.c_str()), actual->beginLine, actual->beginColumn); - list.addElement(error); + this->list.addElement(error); this->error_count++; diff --git a/src_smartcontract/engine/compiler/SmartContractParser.cpp b/src_smartcontract/engine/compiler/SmartContractParser.cpp index 354c10f..883bdcf 100644 --- a/src_smartcontract/engine/compiler/SmartContractParser.cpp +++ b/src_smartcontract/engine/compiler/SmartContractParser.cpp @@ -88,6 +88,10 @@ AlinousLang* SmartContractParser::getDebugAlinousLang() { return this->alinousLang; } +/** + * Throws ParseException + * @return + */ CompilationUnit* SmartContractParser::parse() { if(this->inStream == nullptr){ this->length = this->file->length(); @@ -117,7 +121,7 @@ CompilationUnit* SmartContractParser::parseStream() { } bool SmartContractParser::hasError() const noexcept { - return this->parserErrorHandler != nullptr && this->parserErrorHandler != nullptr && + return (this->parserErrorHandler != nullptr && this->parserErrorHandler != nullptr) && (this->parserErrorHandler->hasError() || this->lexErrorHandler->hasError()); } diff --git a/src_smartcontract/engine/compiler/StatementRepairSkipper.cpp b/src_smartcontract/engine/compiler/StatementRepairSkipper.cpp new file mode 100644 index 0000000..23dfd4e --- /dev/null +++ b/src_smartcontract/engine/compiler/StatementRepairSkipper.cpp @@ -0,0 +1,112 @@ +/* + * StatementRepairSkipper.cpp + * + * Created on: Apr 29, 2026 + * Author: iizuka + */ + +#include "engine/compiler/StatementRepairSkipper.h" + +#include "alinous_lang/AlinousLang.h" +#include "alinous_lang/Token.h" + +namespace codablecash { + +StatementRepairSkipper::StatementRepairSkipper(AlinousLang* lang) { + this->lang = lang; + this->lastToken = nullptr; +} + +StatementRepairSkipper::~StatementRepairSkipper() { + this->lang = nullptr; + this->lastToken = nullptr; +} + +void StatementRepairSkipper::recoverStatement() { + Token* token = nullptr; + do{ + token = getToken(); + }while(!isStatementStopToken(token)); +} + +bool StatementRepairSkipper::isStatementStopToken(Token *token) { + return isEOF(token) || isSemicolon(token) || isBraceEnd(token) || isNextStatement(token) || isNextBraceStarts(token); +} + +/*** + * for statement + */ +void StatementRepairSkipper::recoverForStatement() { + Token* token = nullptr; + do{ + token = getToken(); + }while(!isForStatementStopToken(token)); +} + +bool StatementRepairSkipper::isForStatementStopToken(Token *token) { + return isEOF(token) || isNextBraceStarts(token); +} + +bool StatementRepairSkipper::isEOF(Token *token) { + return token->kind == alinouslang::_EOF; +} + +bool StatementRepairSkipper::isSemicolon(Token *token) { + return token->kind == alinouslang::SEMI_COLON; +} + +bool StatementRepairSkipper::isBraceEnd(Token *token) { + bool res = token->kind == alinouslang::R_BRACE; + if(res == true){ + // push back + this->lang->token = this->lastToken; + } + + return res; +} + +Token* StatementRepairSkipper::getToken() { + this->lastToken = this->lang->token; + Token* token = lang->getNextToken(); + + countToken(token); + + return token; +} + +void StatementRepairSkipper::countToken(Token *token) { + if(token->kind == alinouslang::L_BRACE){ + + } + else if(token->kind == alinouslang::R_BRACE){ + + } +} + +bool StatementRepairSkipper::isNextStatement(Token *token) { + bool bl = false; + int k = token->kind; + if(k == alinouslang::IF || k == alinouslang::WHILE || k == alinouslang::FOR || k == alinouslang::DO + || k == alinouslang::SELECT || k == alinouslang::INSERT || k == alinouslang::UPDATE || k == alinouslang::DELETE + || k == alinouslang::BEGIN || k == alinouslang::COMMIT || k == alinouslang::ROLLBACK){ + bl = true; + // push back + this->lang->token = this->lastToken; + } + + return bl; +} + +bool StatementRepairSkipper::isNextBraceStarts(Token *token) { + bool bl = false; + int k = token->kind; + if(k == alinouslang::L_BRACE){ + bl = true; + // push back + this->lang->token = this->lastToken; + } + + return bl; +} + +} /* namespace codablecash */ diff --git a/src_smartcontract/engine/compiler/StatementRepairSkipper.h b/src_smartcontract/engine/compiler/StatementRepairSkipper.h new file mode 100644 index 0000000..9731a25 --- /dev/null +++ b/src_smartcontract/engine/compiler/StatementRepairSkipper.h @@ -0,0 +1,49 @@ +/* + * StatementRepairSkipper.h + * + * Created on: Apr 29, 2026 + * Author: iizuka + */ + +#ifndef ENGINE_COMPILER_STATEMENTREPAIRSKIPPER_H_ +#define ENGINE_COMPILER_STATEMENTREPAIRSKIPPER_H_ + +namespace alinouslang { +class AlinousLang; +class Token; +} +using namespace alinouslang; + +namespace codablecash { + +class StatementRepairSkipper { +public: + explicit StatementRepairSkipper(AlinousLang* lang); + virtual ~StatementRepairSkipper(); + + void recoverStatement(); + bool isStatementStopToken(Token* token); + + void recoverForStatement(); + bool isForStatementStopToken(Token* token); + + bool isEOF(Token* token); + bool isSemicolon(Token* token); + bool isBraceEnd(Token* token); + bool isNextBraceStarts(Token* token); + bool isNextStatement(Token* token); + + Token* getToken(); + +private: + void countToken(Token* token); + +private: + AlinousLang* lang; + Token* lastToken; + +}; + +} /* namespace codablecash */ + +#endif /* ENGINE_COMPILER_STATEMENTREPAIRSKIPPER_H_ */ diff --git a/src_smartcontract/engine/jj/alinous.jj b/src_smartcontract/engine/jj/alinous.jj index 7f864ac..3fdb0ca 100644 --- a/src_smartcontract/engine/jj/alinous.jj +++ b/src_smartcontract/engine/jj/alinous.jj @@ -510,7 +510,7 @@ ClassDeclare* classDeclare() : } | cls="interface" { - clazz = new ClassDeclare(); + clazz = new ClassDeclare(); __clazz.reset(clazz); clazz->setInterface(true); } ) @@ -525,7 +525,7 @@ ClassDeclare* classDeclare() : gclazz->setName(new UnicodeString(clazz->getName())); // copy class name delete clazz; - clazz = gclazz; + clazz = gclazz; __clazz.reset(clazz); } name={ @@ -942,7 +942,9 @@ AbstractType* typeBody() : { } ObjectType* objectType() : { - ObjectType* dec = new ObjectType(); __STP(dec); + StackRelease __dec; + ObjectType* dec = new ObjectType(); __dec.reset(dec); + PackageNameDeclare* packageName = nullptr; Token* t=nullptr; GenericsObjectType* geneticsObject = nullptr; @@ -972,7 +974,7 @@ ObjectType* objectType() : { t= { geneticsObject = new GenericsObjectType(dec); delete dec; - dec = geneticsObject; + dec = geneticsObject; __dec.reset(dec); } genericsType=typeDeclare() { geneticsObject->addGenericsType(genericsType); @@ -995,7 +997,7 @@ ObjectType* objectType() : { { - return __STP_MV(dec); + return __dec.move(); } } @@ -1148,10 +1150,14 @@ AbstractStatement* statement() : { try{ std::rethrow_exception(p); }catch(ParseException* e){ - if(e != nullptr){ - delete e; - } + delete e; } + + StatementRepairSkipper skipper(this); + skipper.recoverStatement(); + } + { + return nullptr; } } @@ -1214,7 +1220,6 @@ AbstractStatement* substitutionStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); return stmt; } } @@ -1286,8 +1291,10 @@ StatementBlock* statementBlock() : { ( stmt=statement() { - block->addStatement(stmt); - block->setPosition(stmt); + if(stmt != nullptr){ + block->addStatement(stmt); + block->setPosition(stmt); + } } )* @@ -1455,51 +1462,78 @@ ThrowStatement* throwStatement() : { } } -ForStatement* forStatement() : { - ForStatement* stmt = new ForStatement(); __STP(stmt); +AbstractStatement* forStatement() : { + StackRelease __stmt; + ForStatement* stmt = new ForStatement(); __stmt.reset(stmt); + + AbstractStatement* ret = nullptr; + StackRelease __ret; + AbstractExpression* exp = nullptr; AbstractStatement* st = nullptr; Token* t = nullptr; } { - t="for" { - stmt->setPosition(t); - } - t="(" { - stmt->setPosition(t); - } - - st=forInnerStatement() { - stmt->setInit(st); - stmt->setPosition(st); - } - t=";" { - stmt->setPosition(t); - } - - exp=expression() { - stmt->setCondition(exp); - stmt->setPosition(exp); + try{ + t="for" { + stmt->setPosition(t); + } + t="(" { + stmt->setPosition(t); + } + + st=forInnerStatement() { + stmt->setInit(st); + stmt->setPosition(st); + } + t=";" { + stmt->setPosition(t); + } + + exp=expression() { + stmt->setCondition(exp); + stmt->setPosition(exp); + } + t=";" { + stmt->setPosition(t); + } + + st=forInnerStatement() { + stmt->setPostLoop(st); + stmt->setPosition(st); + } + + t=")" { + stmt->setPosition(t); + }{ + ret = __stmt.move(); __ret.reset(ret); + } } - t=";" { - stmt->setPosition(t); + catch(ParseException* e){ + std::exception_ptr p = std::current_exception(); + try{ + std::rethrow_exception(p); + }catch(ParseException* e){ + delete e; + } + + StatementRepairSkipper skipper(this); + skipper.recoverForStatement(); } + - st=forInnerStatement() { - stmt->setPostLoop(st); - stmt->setPosition(st); - } - - t=")" { - stmt->setPosition(t); - } st=statement() { - stmt->setStatement(st); - stmt->setPosition(st); + if(ret != nullptr){ + stmt->setStatement(st); + stmt->setPosition(st); + } + else { + ret = st; __ret.reset(st); + } } { - return __STP_MV(stmt); + return __ret.move(); } } @@ -1528,8 +1562,10 @@ DoWhileStatement* doWhileStatement() : { stmt->setPosition(t); } st=statement() { - stmt->setStatement(st); - stmt->setPosition(st); + if(st != nullptr){ + stmt->setStatement(st); + stmt->setPosition(st); + } } t="while" { stmt->setPosition(t); @@ -1660,8 +1696,10 @@ IfStatement* ifStatement() : { ")" stmt=statement() { - ifstmt->setStatement(stmt); - ifstmt->setPosition(stmt); + if(stmt != nullptr){ + ifstmt->setStatement(stmt); + ifstmt->setPosition(stmt); + } } (LOOKAHEAD(2) @@ -1674,8 +1712,10 @@ IfStatement* ifStatement() : { [LOOKAHEAD(2) t="else" { ifstmt->setPosition(t); } stmt=statement() { - ifstmt->setElseStatement(stmt); - ifstmt->setPosition(stmt); + if(stmt != nullptr){ + ifstmt->setElseStatement(stmt); + ifstmt->setPosition(stmt); + } } ] @@ -1703,8 +1743,10 @@ IfStatement* elseifStatement() : { t=")" {ifstmt->setPosition(t);} stmt=statement() { - ifstmt->setStatement(stmt); - ifstmt->setPosition(stmt); + if(stmt != nullptr){ + ifstmt->setStatement(stmt); + ifstmt->setPosition(stmt); + } } { return __STP_MV(ifstmt); @@ -1896,10 +1938,10 @@ AbstractExpression* andExpression() : { t="&" { if(exp == nullptr){ - exp = new AndExpression(); + exp = new AndExpression(); __STP(exp); exp->setPosition(left); exp->addExp(left); - left = exp; __left.reset(left); + left = __STP_MV(exp); __left.reset(left); } exp->setPosition(t); @@ -1932,10 +1974,10 @@ AbstractExpression* equalityExpression() : { [ ( t="==" { - exp = new EqualityExpression(); + exp = new EqualityExpression(); __STP(exp); exp->setPosition(left); exp->setLeft(left); - left = exp; + left = __STP_MV(exp); __left.reset(left); exp->setPosition(t); exp->setOp(EqualityExpression::EQ); @@ -2166,7 +2208,7 @@ AbstractExpression* multiplicativeExpression() : { exp = new MultiplicativeExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->addOpe(MultiplicativeExpression::DIV); exp->setPosition(t); diff --git a/src_smartcontract/engine/jj/base.jj b/src_smartcontract/engine/jj/base.jj index bb0637f..db7f134 100644 --- a/src_smartcontract/engine/jj/base.jj +++ b/src_smartcontract/engine/jj/base.jj @@ -158,7 +158,7 @@ ClassDeclare* classDeclare() : } | cls="interface" { - clazz = new ClassDeclare(); + clazz = new ClassDeclare(); __clazz.reset(clazz); clazz->setInterface(true); } ) @@ -173,7 +173,7 @@ ClassDeclare* classDeclare() : gclazz->setName(new UnicodeString(clazz->getName())); // copy class name delete clazz; - clazz = gclazz; + clazz = gclazz; __clazz.reset(clazz); } name={ diff --git a/src_smartcontract/engine/jj/expression.jj b/src_smartcontract/engine/jj/expression.jj index cd6ce4c..5b43784 100644 --- a/src_smartcontract/engine/jj/expression.jj +++ b/src_smartcontract/engine/jj/expression.jj @@ -183,10 +183,10 @@ AbstractExpression* andExpression() : { t="&" { if(exp == nullptr){ - exp = new AndExpression(); + exp = new AndExpression(); __STP(exp); exp->setPosition(left); exp->addExp(left); - left = exp; __left.reset(left); + left = __STP_MV(exp); __left.reset(left); } exp->setPosition(t); @@ -219,10 +219,10 @@ AbstractExpression* equalityExpression() : { [ ( t="==" { - exp = new EqualityExpression(); + exp = new EqualityExpression(); __STP(exp); exp->setPosition(left); exp->setLeft(left); - left = exp; + left = __STP_MV(exp); __left.reset(left); exp->setPosition(t); exp->setOp(EqualityExpression::EQ); @@ -453,7 +453,7 @@ AbstractExpression* multiplicativeExpression() : { exp = new MultiplicativeExpression(); exp->setPosition(left); exp->addExp(left); - left = exp; + left = exp; __left.reset(left); } exp->addOpe(MultiplicativeExpression::DIV); exp->setPosition(t); diff --git a/src_smartcontract/engine/jj/statement.jj b/src_smartcontract/engine/jj/statement.jj index d47829f..da140fd 100644 --- a/src_smartcontract/engine/jj/statement.jj +++ b/src_smartcontract/engine/jj/statement.jj @@ -28,10 +28,14 @@ AbstractStatement* statement() : { try{ std::rethrow_exception(p); }catch(ParseException* e){ - if(e != nullptr){ - delete e; - } + delete e; } + + StatementRepairSkipper skipper(this); + skipper.recoverStatement(); + } + { + return nullptr; } } @@ -94,7 +98,6 @@ AbstractStatement* substitutionStatement() : { stmt->setPosition(t); } { - __ONERROR(stmt); return stmt; } } @@ -166,8 +169,10 @@ StatementBlock* statementBlock() : { ( stmt=statement() { - block->addStatement(stmt); - block->setPosition(stmt); + if(stmt != nullptr){ + block->addStatement(stmt); + block->setPosition(stmt); + } } )* diff --git a/src_smartcontract/engine/jj/statement_ctrl.jj b/src_smartcontract/engine/jj/statement_ctrl.jj index 344c867..ce9de56 100644 --- a/src_smartcontract/engine/jj/statement_ctrl.jj +++ b/src_smartcontract/engine/jj/statement_ctrl.jj @@ -134,51 +134,78 @@ ThrowStatement* throwStatement() : { } } -ForStatement* forStatement() : { - ForStatement* stmt = new ForStatement(); __STP(stmt); +AbstractStatement* forStatement() : { + StackRelease __stmt; + ForStatement* stmt = new ForStatement(); __stmt.reset(stmt); + + AbstractStatement* ret = nullptr; + StackRelease __ret; + AbstractExpression* exp = nullptr; AbstractStatement* st = nullptr; Token* t = nullptr; } { - t="for" { - stmt->setPosition(t); - } - t="(" { - stmt->setPosition(t); - } - - st=forInnerStatement() { - stmt->setInit(st); - stmt->setPosition(st); - } - t=";" { - stmt->setPosition(t); - } - - exp=expression() { - stmt->setCondition(exp); - stmt->setPosition(exp); + try{ + t="for" { + stmt->setPosition(t); + } + t="(" { + stmt->setPosition(t); + } + + st=forInnerStatement() { + stmt->setInit(st); + stmt->setPosition(st); + } + t=";" { + stmt->setPosition(t); + } + + exp=expression() { + stmt->setCondition(exp); + stmt->setPosition(exp); + } + t=";" { + stmt->setPosition(t); + } + + st=forInnerStatement() { + stmt->setPostLoop(st); + stmt->setPosition(st); + } + + t=")" { + stmt->setPosition(t); + }{ + ret = __stmt.move(); __ret.reset(ret); + } } - t=";" { - stmt->setPosition(t); + catch(ParseException* e){ + std::exception_ptr p = std::current_exception(); + try{ + std::rethrow_exception(p); + }catch(ParseException* e){ + delete e; + } + + StatementRepairSkipper skipper(this); + skipper.recoverForStatement(); } + - st=forInnerStatement() { - stmt->setPostLoop(st); - stmt->setPosition(st); - } - - t=")" { - stmt->setPosition(t); - } st=statement() { - stmt->setStatement(st); - stmt->setPosition(st); + if(ret != nullptr){ + stmt->setStatement(st); + stmt->setPosition(st); + } + else { + ret = st; __ret.reset(st); + } } { - return __STP_MV(stmt); + return __ret.move(); } } @@ -207,8 +234,10 @@ DoWhileStatement* doWhileStatement() : { stmt->setPosition(t); } st=statement() { - stmt->setStatement(st); - stmt->setPosition(st); + if(st != nullptr){ + stmt->setStatement(st); + stmt->setPosition(st); + } } t="while" { stmt->setPosition(t); @@ -339,8 +368,10 @@ IfStatement* ifStatement() : { ")" stmt=statement() { - ifstmt->setStatement(stmt); - ifstmt->setPosition(stmt); + if(stmt != nullptr){ + ifstmt->setStatement(stmt); + ifstmt->setPosition(stmt); + } } (LOOKAHEAD(2) @@ -353,8 +384,10 @@ IfStatement* ifStatement() : { [LOOKAHEAD(2) t="else" { ifstmt->setPosition(t); } stmt=statement() { - ifstmt->setElseStatement(stmt); - ifstmt->setPosition(stmt); + if(stmt != nullptr){ + ifstmt->setElseStatement(stmt); + ifstmt->setPosition(stmt); + } } ] @@ -382,8 +415,10 @@ IfStatement* elseifStatement() : { t=")" {ifstmt->setPosition(t);} stmt=statement() { - ifstmt->setStatement(stmt); - ifstmt->setPosition(stmt); + if(stmt != nullptr){ + ifstmt->setStatement(stmt); + ifstmt->setPosition(stmt); + } } { return __STP_MV(ifstmt); diff --git a/src_smartcontract/engine/jj/types.jj b/src_smartcontract/engine/jj/types.jj index 5285bb2..cae1638 100644 --- a/src_smartcontract/engine/jj/types.jj +++ b/src_smartcontract/engine/jj/types.jj @@ -51,7 +51,9 @@ AbstractType* typeBody() : { } ObjectType* objectType() : { - ObjectType* dec = new ObjectType(); __STP(dec); + StackRelease __dec; + ObjectType* dec = new ObjectType(); __dec.reset(dec); + PackageNameDeclare* packageName = nullptr; Token* t=nullptr; GenericsObjectType* geneticsObject = nullptr; @@ -81,7 +83,7 @@ ObjectType* objectType() : { t= { geneticsObject = new GenericsObjectType(dec); delete dec; - dec = geneticsObject; + dec = geneticsObject; __dec.reset(dec); } genericsType=typeDeclare() { geneticsObject->addGenericsType(genericsType); @@ -104,7 +106,7 @@ ObjectType* objectType() : { { - return __STP_MV(dec); + return __dec.move(); } } diff --git a/src_smartcontract/engine/sc/alinouslang.h b/src_smartcontract/engine/sc/alinouslang.h index ffb8c06..cad7ac1 100644 --- a/src_smartcontract/engine/sc/alinouslang.h +++ b/src_smartcontract/engine/sc/alinouslang.h @@ -13,6 +13,8 @@ #include "alinous_lang/ParseException.h" +#include "engine/compiler/StatementRepairSkipper.h" + #include "engine/sc/CompilationUnit.h" #include "lang/sc_declare/AccessControlDeclare.h" diff --git a/src_smartcontract/lang/sc_statement_ctrl/DoWhileStatement.cpp b/src_smartcontract/lang/sc_statement_ctrl/DoWhileStatement.cpp index ac2a5b4..4888f60 100644 --- a/src_smartcontract/lang/sc_statement_ctrl/DoWhileStatement.cpp +++ b/src_smartcontract/lang/sc_statement_ctrl/DoWhileStatement.cpp @@ -50,8 +50,10 @@ void DoWhileStatement::preAnalyze(AnalyzeContext* actx) { this->exp->setParent(this); this->exp->preAnalyze(actx); - this->stmt->setParent(this); - this->stmt->preAnalyze(actx); + if(this->stmt != nullptr){ + this->stmt->setParent(this); + this->stmt->preAnalyze(actx); + } StatementBlock* block = dynamic_cast(this->stmt); if(block != nullptr){ @@ -61,13 +63,18 @@ void DoWhileStatement::preAnalyze(AnalyzeContext* actx) { void DoWhileStatement::analyzeTypeRef(AnalyzeContext* actx) { this->exp->analyzeTypeRef(actx); - this->stmt->analyzeTypeRef(actx); + if(this->stmt != nullptr){ + this->stmt->analyzeTypeRef(actx); + } } void alinous::DoWhileStatement::analyze(AnalyzeContext* actx) { this->exp->analyze(actx); - this->stmt->analyze(actx); + + if(this->stmt != nullptr){ + this->stmt->analyze(actx); + } AnalyzedType atype = this->exp->getType(actx); uint8_t type = atype.getType(); @@ -178,7 +185,7 @@ bool DoWhileStatement::hasCtrlStatement() const noexcept { } bool DoWhileStatement::hasConstructor() const noexcept { - return this->stmt->hasConstructor(); + return this->stmt != nullptr ? this->stmt->hasConstructor() : false; } AbstractStatement* DoWhileStatement::generateGenericsImplement(HashMap *input) const { @@ -188,8 +195,10 @@ AbstractStatement* DoWhileStatement::generateGenericsImplement(HashMapexp->generateGenericsImplement(input); inst->setExpression(copiedExp); - AbstractStatement* copiedStmt = this->stmt->generateGenericsImplement(input); - inst->setStatement(copiedStmt); + if(this->stmt != nullptr){ + AbstractStatement* copiedStmt = this->stmt->generateGenericsImplement(input); + inst->setStatement(copiedStmt); + } return inst; } diff --git a/src_smartcontract/lang/sc_statement_ctrl/IfStatement.cpp b/src_smartcontract/lang/sc_statement_ctrl/IfStatement.cpp index dc6bdf6..39de8fb 100644 --- a/src_smartcontract/lang/sc_statement_ctrl/IfStatement.cpp +++ b/src_smartcontract/lang/sc_statement_ctrl/IfStatement.cpp @@ -48,8 +48,11 @@ void IfStatement::preAnalyze(AnalyzeContext* actx) { this->exp->setParent(this); this->exp->preAnalyze(actx); - this->stmt->setParent(this); - this->stmt->preAnalyze(actx); + if(this->stmt != nullptr){ + this->stmt->setParent(this); + this->stmt->preAnalyze(actx); + } + int maxLoop = this->list.size(); for(int i = 0; i != maxLoop; ++i){ @@ -67,7 +70,10 @@ void IfStatement::preAnalyze(AnalyzeContext* actx) { void IfStatement::analyzeTypeRef(AnalyzeContext* actx) { this->exp->analyzeTypeRef(actx); - this->stmt->analyzeTypeRef(actx); + + if(this->stmt != nullptr){ + this->stmt->analyzeTypeRef(actx); + } int maxLoop = this->list.size(); for(int i = 0; i != maxLoop; ++i){ @@ -83,7 +89,10 @@ void IfStatement::analyzeTypeRef(AnalyzeContext* actx) { void IfStatement::analyze(AnalyzeContext* actx) { this->exp->analyze(actx); - this->stmt->analyze(actx); + + if(this->stmt != nullptr){ + this->stmt->analyze(actx); + } int maxLoop = this->list.size(); for(int i = 0; i != maxLoop; ++i){ @@ -112,13 +121,13 @@ void IfStatement::analyze(AnalyzeContext* actx) { } // bctrl - this->bctrl = this->bctrl || this->stmt->hasCtrlStatement(); + this->bctrl = this->bctrl || (this->stmt != nullptr && this->stmt->hasCtrlStatement()); maxLoop = this->list.size(); for(int i = 0; i != maxLoop; ++i){ IfStatement* stmt = this->list.get(i); - this->bctrl = this->bctrl || stmt->hasCtrlStatement(); + this->bctrl = this->bctrl || (this->stmt != nullptr && stmt->hasCtrlStatement()); } if(this->elseStmt != nullptr){ this->bctrl = this->bctrl || this->elseStmt->hasCtrlStatement(); @@ -287,7 +296,7 @@ bool IfStatement::hasCtrlStatement() const noexcept { } bool IfStatement::hasConstructor() const noexcept { - bool ret = this->stmt->hasConstructor(); + bool ret = this->stmt != nullptr ? this->stmt->hasConstructor() : false; int maxLoop = this->list.size(); for(int i = 0; i != maxLoop; ++i){ @@ -313,8 +322,10 @@ AbstractStatement* IfStatement::generateGenericsImplement(HashMapexp->generateGenericsImplement(input); inst->setExpression(copiedExp); - copiedStmt = this->stmt->generateGenericsImplement(input); - inst->setStatement(copiedStmt); + if(this->stmt != nullptr){ + copiedStmt = this->stmt->generateGenericsImplement(input); + inst->setStatement(copiedStmt); + } int maxLoop = this->list.size(); for(int i = 0; i != maxLoop; ++i){ diff --git a/src_smartcontract_modular/transaction/NopSmartcontractTransaction.cpp b/src_smartcontract_modular/transaction/NopSmartcontractTransaction.cpp index d30343a..2d2bfaf 100644 --- a/src_smartcontract_modular/transaction/NopSmartcontractTransaction.cpp +++ b/src_smartcontract_modular/transaction/NopSmartcontractTransaction.cpp @@ -17,7 +17,7 @@ #include "bc_trx/TransactionId.h" #include "bc_trx/AbstractUtxo.h" - +#include "bc_trx/TransactionVersion.h" namespace codablecash { @@ -105,11 +105,12 @@ void NopSmartcontractTransaction::fromBinary(ByteBuffer *in) { void NopSmartcontractTransaction::build() { setUtxoNonce(); - int capacity = sizeof(uint8_t) + this->timestamp->binarySize() + sizeof(this->nonce); + int capacity = sizeof(uint8_t) + this->version->binarySize() + this->timestamp->binarySize() + sizeof(this->nonce); ByteBuffer* buff = ByteBuffer::allocateWithEndian(capacity, true); __STP(buff); buff->put(getType()); + this->version->toBinary(buff); this->timestamp->toBinary(buff); buff->putLong(this->nonce); @@ -122,10 +123,14 @@ void NopSmartcontractTransaction::build() { } void NopSmartcontractTransaction::setUtxoNonce() noexcept { - int capacity = sizeof(uint8_t) + this->timestamp->binarySize(); + BinaryUtils::checkNotNull(this->timestamp); + BinaryUtils::checkNotNull(this->version); + + int capacity = sizeof(uint8_t) + this->version->binarySize() + this->timestamp->binarySize(); ByteBuffer* buff = ByteBuffer::allocateWithEndian(capacity, true); __STP(buff); buff->put(getType()); + this->version->toBinary(buff); this->timestamp->toBinary(buff); diff --git a/src_test/CMakeLists.txt b/src_test/CMakeLists.txt index f35a8c2..46bbe1a 100644 --- a/src_test/CMakeLists.txt +++ b/src_test/CMakeLists.txt @@ -9,6 +9,7 @@ add_subdirectory(blockchain/finalizer/dummy) add_subdirectory(blockchain/fw) add_subdirectory(blockchain/instance) add_subdirectory(blockchain/memorypool) +add_subdirectory(blockchain/multi_shard) add_subdirectory(blockchain/pow) add_subdirectory(blockchain/pow_pool) add_subdirectory(blockchain/testnet) diff --git a/src_test/blockchain/multi_shard/CMakeLists.txt b/src_test/blockchain/multi_shard/CMakeLists.txt new file mode 100644 index 0000000..77621bf --- /dev/null +++ b/src_test/blockchain/multi_shard/CMakeLists.txt @@ -0,0 +1,6 @@ + +set(testsrc + +) +handle_sub(testall "${testsrc}" test blockchain/multi_shard) + diff --git a/src_test/blockchain/pow_pool/test_pow_pool.cpp b/src_test/blockchain/pow_pool/test_pow_pool.cpp index 2188e9b..12d6ef2 100644 --- a/src_test/blockchain/pow_pool/test_pow_pool.cpp +++ b/src_test/blockchain/pow_pool/test_pow_pool.cpp @@ -77,13 +77,13 @@ TEST(TestPoWPoolGroup, case01){ { manager.start(); + manager.requestNewHeaderId(); + // start client PoWWorkerClient client(&logger, 8, 20000); UnicodeString host(L"127.0.0.1"); client.start(P2pNodeRecord::TCP_IP_V4, &host, port); - manager.requestNewHeaderId(); - generator.waitUntilGetData(); const PoWNonce* nonce = generator.getNonce(); diff --git a/src_test/blockchain/trx/test_ticket_transaction_wallet.cpp b/src_test/blockchain/trx/test_ticket_transaction_wallet.cpp index 118a7d9..ae32517 100644 --- a/src_test/blockchain/trx/test_ticket_transaction_wallet.cpp +++ b/src_test/blockchain/trx/test_ticket_transaction_wallet.cpp @@ -30,7 +30,7 @@ using namespace codablecash; -TEST_GROUP(TestTicketTransactioWalletGroup) { +TEST_GROUP(TestTicketTransactionWalletGroup) { TEST_SETUP(){ env->setup(); } @@ -70,7 +70,7 @@ static bool balancecheck(AbstractFinalizerTransaction* trx, WalletAccount* accou return right.compareTo(&left) == 0; } -TEST(TestTicketTransactioWalletGroup, case01) { +TEST(TestTicketTransactionWalletGroup, case01) { File projectFolder = this->env->testCaseDir(); _ST(File, baseDir, projectFolder.get(L"wallet")) @@ -105,7 +105,7 @@ TEST(TestTicketTransactioWalletGroup, case01) { } -TEST(TestTicketTransactioWalletGroup, case02) { +TEST(TestTicketTransactionWalletGroup, case02) { File projectFolder = this->env->testCaseDir(); _ST(File, baseDir, projectFolder.get(L"wallet")) @@ -147,7 +147,7 @@ TEST(TestTicketTransactioWalletGroup, case02) { } } -TEST(TestTicketTransactioWalletGroup, case03) { +TEST(TestTicketTransactionWalletGroup, case03) { File projectFolder = this->env->testCaseDir(); _ST(File, baseDir, projectFolder.get(L"wallet")) @@ -158,7 +158,7 @@ TEST(TestTicketTransactioWalletGroup, case03) { HdWalletSeed* seed = HdWalletSeed::newSeed(); __STP(seed); HdWallet* wallet = HdWallet::create(baseDir, seed, 0, &enc, 10); __STP(wallet); WalletAccount* account = wallet->getAccount(0); - BalanceUnit amount(296L); + BalanceUnit amount(299L); GenesisTransaction* trx = account->createGenesisTransaction(amount, 5); __STP(trx); account->importTransaction(trx); } @@ -181,7 +181,7 @@ TEST(TestTicketTransactioWalletGroup, case03) { } } -TEST(TestTicketTransactioWalletGroup, caseTicket01) { +TEST(TestTicketTransactionWalletGroup, caseTicket01) { File projectFolder = this->env->testCaseDir(); _ST(File, baseDir, projectFolder.get(L"wallet")) @@ -194,7 +194,7 @@ TEST(TestTicketTransactioWalletGroup, caseTicket01) { WalletAccount* account = wallet->getAccount(0); { - BalanceUnit amount(296L); + BalanceUnit amount(299L); GenesisTransaction* trx = account->createGenesisTransaction(amount, 5); __STP(trx); account->importTransaction(trx); } @@ -236,7 +236,7 @@ TEST(TestTicketTransactioWalletGroup, caseTicket01) { } } -TEST(TestTicketTransactioWalletGroup, caseTicket02) { +TEST(TestTicketTransactionWalletGroup, caseTicket02) { File projectFolder = this->env->testCaseDir(); _ST(File, baseDir, projectFolder.get(L"wallet")) diff --git a/src_test/smartcontract/test_parser.cpp b/src_test/smartcontract/test_parser.cpp index 8ba7c99..5030152 100644 --- a/src_test/smartcontract/test_parser.cpp +++ b/src_test/smartcontract/test_parser.cpp @@ -10,6 +10,7 @@ #include "engine/compiler/SmartContractParser.h" #include "engine/sc/CompilationUnit.h" +#include "../../src_gen/alinous_lang/ParseException.h" using namespace alinous; TEST_GROUP(TestParserGroup) { @@ -46,9 +47,11 @@ TEST(TestParserGroup, parseError01){ _ST(File, sourceFile, projectFolder->get(L"src_test/smartcontract/resources/parser/helloerr1.alns")) SmartContractParser parser(sourceFile); - CompilationUnit* unit = parser.parse(); - if(unit != nullptr){ - delete unit; + + try{ + CompilationUnit* unit = parser.parse(); __STP(unit); + }catch(ParseException* e){ + delete e; } CHECK(parser.hasError()) @@ -60,9 +63,10 @@ TEST(TestParserGroup, lexError01){ _ST(File, sourceFile, projectFolder->get(L"src_test/smartcontract/resources/parser/helloerrlex.alns")) SmartContractParser parser(sourceFile); - CompilationUnit* unit = parser.parse(); - if(unit != nullptr){ - delete unit; + try{ + CompilationUnit* unit = parser.parse(); __STP(unit); + }catch(ParseException* e){ + delete e; } CHECK(parser.hasError()) @@ -73,9 +77,10 @@ TEST(TestParserGroup, lexError02){ _ST(File, sourceFile, projectFolder->get(L"src_test/smartcontract/resources/parser/helloerrlexeof.alns")) SmartContractParser parser(sourceFile); - CompilationUnit* unit = parser.parse(); - if(unit != nullptr){ - delete unit; + try{ + CompilationUnit* unit = parser.parse(); __STP(unit); + }catch(ParseException* e){ + delete e; } CHECK(parser.hasError()) @@ -87,9 +92,10 @@ TEST(TestParserGroup, lexError03){ _ST(File, sourceFile, projectFolder->get(L"src_test/smartcontract/resources/parser/helloerrlexeof2.alns")) SmartContractParser parser(sourceFile); - CompilationUnit* unit = parser.parse(); - if(unit != nullptr){ - delete unit; + try{ + CompilationUnit* unit = parser.parse(); __STP(unit); + }catch(ParseException* e){ + delete e; } CHECK(parser.hasError()) diff --git a/src_test/smartcontract_db/select/select_condition/test_like_condition.cpp b/src_test/smartcontract_db/select/select_condition/test_like_condition.cpp index 4d6181f..94b8d0d 100644 --- a/src_test/smartcontract_db/select/select_condition/test_like_condition.cpp +++ b/src_test/smartcontract_db/select/select_condition/test_like_condition.cpp @@ -31,6 +31,8 @@ #include "ext_binary/ExtDomArrayObject.h" #include "ext_binary/ExtDomObject.h" + +#include "../../../../src_gen/alinous_lang/ParseException.h" using alinouslang::AlinousLang; using namespace alinous; @@ -135,8 +137,12 @@ TEST(TestLikeConditionGroup, case03_err){ { SmartContractParser parser(sourceFile); AlinousLang* lang = parser.getDebugAlinousLang(); - - SelectStatement* stmt = lang->selectStatement(); __STP(stmt); + try{ + SelectStatement* stmt = lang->selectStatement(); __STP(stmt); + } + catch(ParseException* e){ + delete e; + } CHECK(parser.hasError()) } } diff --git a/src_test/smartcontract_err/CMakeLists.txt b/src_test/smartcontract_err/CMakeLists.txt index 4b7fd91..e81c28a 100644 --- a/src_test/smartcontract_err/CMakeLists.txt +++ b/src_test/smartcontract_err/CMakeLists.txt @@ -1,6 +1,7 @@ set(testsrc test_statement_error.cpp + test_recover_while_if.cpp test_exception_std.cpp ) handle_sub(testall "${testsrc}" test smartcontract_err) diff --git a/src_test/smartcontract_err/resources/class01/main_err_eof.alns b/src_test/smartcontract_err/resources/class01/main_err_eof.alns new file mode 100644 index 0000000..62296e4 --- /dev/null +++ b/src_test/smartcontract_err/resources/class01/main_err_eof.alns @@ -0,0 +1,14 @@ + + +package test.fw; + +import test.fw.ObjectA; + +class SmartContract { + public SmartContract() { + int[] ar; + ar = null; + + ar[1] = 10; + + this.result = a \ No newline at end of file diff --git a/src_test/smartcontract_err/resources/class01/main_err_if.alns b/src_test/smartcontract_err/resources/class01/main_err_if.alns new file mode 100644 index 0000000..a5505f3 --- /dev/null +++ b/src_test/smartcontract_err/resources/class01/main_err_if.alns @@ -0,0 +1,26 @@ + + +package test.fw; + +import test.fw.ObjectA; + +class SmartContract { + public SmartContract() { + int[] ar; + ar = null; + + ar[1] = 10; + + this.result = a + + if(ar[1] == 10){ + } + } + + public int main(){ + + } + + private int result; +} + diff --git a/src_test/smartcontract_err/resources/class01/main_err_lbrace.alns b/src_test/smartcontract_err/resources/class01/main_err_lbrace.alns new file mode 100644 index 0000000..69d1db0 --- /dev/null +++ b/src_test/smartcontract_err/resources/class01/main_err_lbrace.alns @@ -0,0 +1,24 @@ + + +package test.fw; + +import test.fw.ObjectA; + +class SmartContract { + public SmartContract() { + int[] ar; + ar = null; + + ar[1] = 10; + + this.result = a + {} + } + + public int main(){ + + } + + private int result; +} + diff --git a/src_test/smartcontract_err/resources/class01/main_err_lex.alns b/src_test/smartcontract_err/resources/class01/main_err_lex.alns new file mode 100644 index 0000000..b4e49ea --- /dev/null +++ b/src_test/smartcontract_err/resources/class01/main_err_lex.alns @@ -0,0 +1,23 @@ + + +package test.fw; + +import test.fw.ObjectA; + +class SmartContract { + public SmartContract() { + int[] ar; + ar = null; + + ar[1] = 10; + + this.result = ` + } + + public int main(){ + + } + + private int result; +} + diff --git a/src_test/smartcontract_err/resources/class01/main_err_semicoron.alns b/src_test/smartcontract_err/resources/class01/main_err_semicoron.alns new file mode 100644 index 0000000..42095c5 --- /dev/null +++ b/src_test/smartcontract_err/resources/class01/main_err_semicoron.alns @@ -0,0 +1,25 @@ + + +package test.fw; + +import test.fw.ObjectA; + +class SmartContract { + public SmartContract() { + int[] ar; + ar = null; + + ar[1] = 10; + + this.result = a + + ar[1] = 10; + } + + public int main(){ + + } + + private int result; +} + diff --git a/src_test/smartcontract_err/resources/for01/main_err_for.alns b/src_test/smartcontract_err/resources/for01/main_err_for.alns new file mode 100644 index 0000000..7f08ad6 --- /dev/null +++ b/src_test/smartcontract_err/resources/for01/main_err_for.alns @@ -0,0 +1,27 @@ + + +package test.fw; + +import test.fw.ObjectA; + +class SmartContract { + public SmartContract() { + int[] ar; + ar = null; + + ar[1] = 10; + + for(ar[0].length() == ; ){ + + } + + this.result = ar[1]; + } + + public int main(){ + + } + + private int result; +} + diff --git a/src_test/smartcontract_err/resources/if01/main_err_if.alns b/src_test/smartcontract_err/resources/if01/main_err_if.alns new file mode 100644 index 0000000..be4ce41 --- /dev/null +++ b/src_test/smartcontract_err/resources/if01/main_err_if.alns @@ -0,0 +1,27 @@ + + +package test.fw; + +import test.fw.ObjectA; + +class SmartContract { + public SmartContract() { + int[] ar; + ar = null; + + ar[1] = 10; + + if(ar[0].length() == ){ + + } + + this.result = ar[1]; + } + + public int main(){ + + } + + private int result; +} + diff --git a/src_test/smartcontract_err/resources/while01/main_err_while.alns b/src_test/smartcontract_err/resources/while01/main_err_while.alns new file mode 100644 index 0000000..9ff9e4e --- /dev/null +++ b/src_test/smartcontract_err/resources/while01/main_err_while.alns @@ -0,0 +1,27 @@ + + +package test.fw; + +import test.fw.ObjectA; + +class SmartContract { + public SmartContract() { + int[] ar; + ar = null; + + ar[1] = 10; + + while(ar[0].length() == ){ + + } + + this.result = ar[1]; + } + + public int main(){ + + } + + private int result; +} + diff --git a/src_test/smartcontract_err/test_recover_while_if.cpp b/src_test/smartcontract_err/test_recover_while_if.cpp new file mode 100644 index 0000000..c0de992 --- /dev/null +++ b/src_test/smartcontract_err/test_recover_while_if.cpp @@ -0,0 +1,52 @@ +/* + * test_recover_while_if.cpp + * + * Created on: Apr 29, 2026 + * Author: iizuka + */ +#include "test_utils/t_macros.h" + +#include "engine/compiler/SmartContractParser.h" + +#include "lang/sc_statement/AbstractStatement.h" + +#include "base/Exception.h" + +#include "alinous_lang/ParseException.h" +#include "engine/sc/CompilationUnit.h" + +TEST_GROUP(TestRecoverWhileIfGroup) { + TEST_SETUP(){} + TEST_TEARDOWN(){} +}; + +TEST(TestRecoverWhileIfGroup, caseif01){ + const File* projectFolder = this->env->getProjectRoot(); + _ST(File, sourceFile, projectFolder->get(L"src_test/smartcontract_err/resources/if01/main_err_if.alns")) + + SmartContractParser parser(sourceFile); + CompilationUnit* unit = parser.parse(); __STP(unit); + + CHECK(parser.hasError()) +} + +TEST(TestRecoverWhileIfGroup, casewhile01){ + const File* projectFolder = this->env->getProjectRoot(); + _ST(File, sourceFile, projectFolder->get(L"src_test/smartcontract_err/resources/while01/main_err_while.alns")) + + SmartContractParser parser(sourceFile); + CompilationUnit* unit = parser.parse(); __STP(unit); + + CHECK(parser.hasError()) +} + +TEST(TestRecoverWhileIfGroup, casefor01){ + const File* projectFolder = this->env->getProjectRoot(); + _ST(File, sourceFile, projectFolder->get(L"src_test/smartcontract_err/resources/for01/main_err_for.alns")) + + SmartContractParser parser(sourceFile); + CompilationUnit* unit = parser.parse(); __STP(unit); + + CHECK(parser.hasError()) +} + diff --git a/src_test/smartcontract_err/test_statement_error.cpp b/src_test/smartcontract_err/test_statement_error.cpp index 555bf24..e4392df 100644 --- a/src_test/smartcontract_err/test_statement_error.cpp +++ b/src_test/smartcontract_err/test_statement_error.cpp @@ -10,6 +10,10 @@ #include "lang/sc_statement/AbstractStatement.h" +#include "base/Exception.h" + +#include "alinous_lang/ParseException.h" + TEST_GROUP(TestStatementErrorGroup) { TEST_SETUP(){} TEST_TEARDOWN(){} @@ -35,3 +39,61 @@ TEST(TestStatementErrorGroup, case02_err){ CHECK(parser.hasError()) } +TEST(TestStatementErrorGroup, case03_err){ + const File* projectFolder = this->env->getProjectRoot(); + _ST(File, sourceFile, projectFolder->get(L"src_test/smartcontract_err/resources/class01/main_err_semicoron.alns")) + + SmartContractParser parser(sourceFile); + CompilationUnit* unit = parser.parse(); + + CHECK(parser.hasError()) +} + +TEST(TestStatementErrorGroup, case04_err){ + const File* projectFolder = this->env->getProjectRoot(); + _ST(File, sourceFile, projectFolder->get(L"src_test/smartcontract_err/resources/class01/main_err_lbrace.alns")) + + SmartContractParser parser(sourceFile); + CompilationUnit* unit = parser.parse(); + + CHECK(parser.hasError()) +} + +TEST(TestStatementErrorGroup, case05_err){ + const File* projectFolder = this->env->getProjectRoot(); + _ST(File, sourceFile, projectFolder->get(L"src_test/smartcontract_err/resources/class01/main_err_eof.alns")) + + ParseException* ex = nullptr; + try{ + SmartContractParser parser(sourceFile); + CompilationUnit* unit = parser.parse(); + } + catch(ParseException* e){ + ex = e; + } + + CHECK(ex != nullptr); + delete ex; +} + +TEST(TestStatementErrorGroup, case06_err){ + const File* projectFolder = this->env->getProjectRoot(); + _ST(File, sourceFile, projectFolder->get(L"src_test/smartcontract_err/resources/class01/main_err_lex.alns")) + + SmartContractParser parser(sourceFile); + CompilationUnit* unit = parser.parse(); + + CHECK(parser.hasError()) +} + +TEST(TestStatementErrorGroup, case07_err){ + const File* projectFolder = this->env->getProjectRoot(); + _ST(File, sourceFile, projectFolder->get(L"src_test/smartcontract_err/resources/class01/main_err_if.alns")) + + SmartContractParser parser(sourceFile); + CompilationUnit* unit = parser.parse(); + + CHECK(parser.hasError()) +} + + diff --git a/src_test/smartcontract_vm/base/resources/typeres/impl.alns b/src_test/smartcontract_vm/base/resources/typeres/impl.alns index c875677..e1da360 100644 --- a/src_test/smartcontract_vm/base/resources/typeres/impl.alns +++ b/src_test/smartcontract_vm/base/resources/typeres/impl.alns @@ -3,5 +3,5 @@ package test.util.imple; interface IDataHandler { -}; +}