diff --git a/daslib/aot_cpp.das b/daslib/aot_cpp.das index 4f2480efb..63935cb49 100644 --- a/daslib/aot_cpp.das +++ b/daslib/aot_cpp.das @@ -221,7 +221,7 @@ def hex_char(var Ch : int) { } def aotSuffixNameEx(funcName : das_string; suffix : string) { - var prefix = false; + var prefix = is_cpp_keyword(string(funcName)); let name = build_string() $(var writer) { for (ch in string(funcName)) { diff --git a/doc/source/reference/language/tuples.rst b/doc/source/reference/language/tuples.rst index 93e589241..e3449247e 100644 --- a/doc/source/reference/language/tuples.rst +++ b/doc/source/reference/language/tuples.rst @@ -42,6 +42,52 @@ tuple directly: Mixing named and positional fields in the same literal is **not** supported — either every field is named or none are. +Shorthand promotion +------------------- + +When every element of a positional tuple literal is a bare variable reference, +the compiler may promote it to a named tuple by taking the field names from the +variables. This only fires when the target type is unambiguously a named tuple +and the variable names match the field names in order: + +.. code-block:: das + + let eid = 7 + let distSq = 2.5 + var t : tuple = (eid, distSq) // ok, promoted + var arr : array> + arr |> push((eid, distSq)) // ok, promoted + + def make_hit(eid : int; distSq : float) : tuple { + return (eid, distSq) // ok, promoted + } + +Promotion is a fallback: if a matching overload already exists for the unnamed +tuple type, that overload wins and no promotion happens. If you want the named +overload, use the explicit named-field literal: + +.. code-block:: das + + def overload_pick(x : tuple) { return 1 } + def overload_pick(x : tuple) { return 2 } + let x = 1 + let y = 2.0 + overload_pick((x, y)) // returns 1: unnamed overload wins + overload_pick((x=x, y=y)) // returns 2: explicit named literal + +A name mismatch fails compilation rather than silently constructing the +unnamed tuple: + +.. code-block:: das + + let foo = 1 + let bar = 1.1 + var arr : array> + // arr |> push((foo, bar)) // error: function_not_found + +Promotion does not fire when any element is not a bare variable reference, e.g. +``(a, a+1)`` stays unnamed. + Tuple elements can be accessed via nameless fields, i.e. _ followed by the 0 base field index: .. code-block:: das diff --git a/doc/source/reference/tutorials/11_tuples_and_variants.rst b/doc/source/reference/tutorials/11_tuples_and_variants.rst index 60745b8d1..f2ea08a84 100644 --- a/doc/source/reference/tutorials/11_tuples_and_variants.rst +++ b/doc/source/reference/tutorials/11_tuples_and_variants.rst @@ -58,6 +58,40 @@ Give a tuple named fields for readability:: let p = Point2D(x=3.0, y=4.0) print("{p.x}, {p.y}\n") +Shorthand: unnamed → named promotion +==================================== + +When the target type is a named tuple and every element of a positional literal +is a bare variable reference whose name matches the field name in order, the +compiler promotes the literal to the named tuple — no need to repeat the +field names:: + + let eid = 7 + let distSq = 2.5 + var hit : tuple = (eid, distSq) // ok, promoted + + var hits : array> + hits |> push((eid, distSq)) // ok, promoted + +It also fires in return position when the function's declared result is a +named tuple:: + + def make_hit(eid : int; distSq : float) : tuple { + return (eid, distSq) // ok, promoted + } + +Promotion is fallback-only: if an unnamed-tuple overload already matches, it +wins. Use the explicit ``(name = value)`` literal to force the named overload:: + + def overload_pick(x : tuple) { return 1 } + def overload_pick(x : tuple) { return 2 } + overload_pick((x, y)) // 1 — unnamed overload wins + overload_pick((x=x, y=y)) // 2 — explicit named literal + +A name mismatch fails compilation (no silent fallback to unnamed). Mixed +expressions like ``(a, a + 1)`` are not bare variable references and never +promote. + Destructuring ============= diff --git a/include/daScript/ast/ast_expressions.h b/include/daScript/ast/ast_expressions.h index f8536f10c..68ba40812 100644 --- a/include/daScript/ast/ast_expressions.h +++ b/include/daScript/ast/ast_expressions.h @@ -1494,6 +1494,7 @@ namespace das virtual void gc_collect ( gc_root * target, gc_root * from ) override; bool isKeyValue = false; vector recordNames; + vector shorthandRecordNames; }; struct DAS_API ExprArrayComprehension : Expression { diff --git a/include/daScript/ast/ast_infer_type.h b/include/daScript/ast/ast_infer_type.h index ae26bba7c..3197972a1 100644 --- a/include/daScript/ast/ast_infer_type.h +++ b/include/daScript/ast/ast_infer_type.h @@ -202,6 +202,8 @@ namespace das { void findMatchingFunctionsAndGenerics(MatchingFunctions &resultFunctions, MatchingFunctions &resultGenerics, const string &name, const vector &types, bool inferBlock = false, bool visCheck = true) const; + bool trySeedTupleShorthand(ExprLooksLikeCall *expr, bool visCheck); + void reportDualFunctionNotFound(const string &name, const string &extra, const LineInfo &at, const MatchingFunctions &candidateFunctions, const vector &types, const vector &types2, bool inferAuto, bool inferBlocks, bool reportDetails, @@ -500,6 +502,7 @@ namespace das { virtual void preVisit(ExprLet *expr) override; virtual void preVisitLet(ExprLet *expr, const VariablePtr &var, bool last) override; + virtual void preVisitLetInit(ExprLet *expr, const VariablePtr &var, Expression *init) override; bool isEmptyInit(const VariablePtr &var) const; virtual VariablePtr visitLet(ExprLet *expr, const VariablePtr &var, bool last) override; ExpressionPtr promoteToCloneToMove(const VariablePtr &var); diff --git a/mouse-data/docs/daslang-aot-cpp-emitter-mangles-keyword-and-operator-function-names.md b/mouse-data/docs/daslang-aot-cpp-emitter-mangles-keyword-and-operator-function-names.md new file mode 100644 index 000000000..42f195ca9 --- /dev/null +++ b/mouse-data/docs/daslang-aot-cpp-emitter-mangles-keyword-and-operator-function-names.md @@ -0,0 +1,93 @@ +--- +slug: daslang-aot-cpp-emitter-mangles-keyword-and-operator-function-names +title: How does the daslang AOT C++ emitter mangle function names — for operator overloads and C++ keywords? +created: 2026-05-14 +last_verified: 2026-05-14 +links: [] +--- + +The AOT C++ emitter lives in `daslib/aot_cpp.das` (NOT the emptied `src/ast/ast_aot_cpp.cpp`). + +**The function-name mangler is `aotFuncName`** at `daslib/aot_cpp.das:928-935`: + +```daslang +def public aotFuncName(func : Function?) { + if (func.hash != uint64(0)) { + return "{aotSuffixNameEx(func.name,"_Func")}_{func.hash:x}"; + } else { + return "{aotSuffixNameEx(func.name,"_Func")}"; + } +} +``` + +All daslang→C++ call sites and def sites go through this helper (verified: `daslib/aot_cpp.das:1084` def site, `:2950/:2966/:3459/:3785` call sites). No bypass paths. + +**`aotSuffixNameEx`** (line 223-267) is where the rewriting happens: + +```daslang +def aotSuffixNameEx(funcName : das_string; suffix : string) { + var prefix = is_cpp_keyword(string(funcName)); // <-- added 2026-05-14 + let name = build_string() $(var writer) { + for (ch in string(funcName)) { + if (is_alnum(ch) || ch == '_') { + writer |> write_char(ch); + } else { + prefix = true; + var t_ch : string; + match (ch) { + if ('=') { t_ch = "Equ"; } + if ('+') { t_ch = "Add"; } + if ('-') { t_ch = "Sub"; } + if ('*') { t_ch = "Mul"; } + if ('/') { t_ch = "Div"; } + if ('%') { t_ch = "Mod"; } + if ('&') { t_ch = "And"; } + if ('|') { t_ch = "Or"; } + if ('^') { t_ch = "Xor"; } + if ('?') { t_ch = "Qmark"; } + if ('~') { t_ch = "Tilda"; } + if ('!') { t_ch = "Excl"; } + if ('>') { t_ch = "Greater"; } + if ('<') { t_ch = "Less"; } + if ('[') { t_ch = "Sqbl"; } + if (']') { t_ch = "Sqbr"; } + if ('.') { t_ch = "Dot"; } + if ('`') { t_ch = "Tick"; } + if (',') { t_ch = "Comma"; } + if (_) { t_ch = "_0x{hex(ch)}_" } // unmapped chars → hex escape + } + write(writer, "{t_ch}") + } + } + } + return prefix ? (suffix + name) : name; // suffix prepended (yes, prepended) iff prefix flag set +} +``` + +The `prefix` boolean controls whether the `suffix` arg ("_Func" for functions, "" for structs via `aotStructName`) is *prepended* to the mangled body. The flag fires in two conditions: + +1. **Any non-alnum char in the name** (operator overloads, backtick-encoded names): the substitution loop sets `prefix = true` as a side effect. +2. **The name is a C++ keyword** (since 2026-05-14): `is_cpp_keyword(name)` seeds the flag. + +**Example emissions:** + +| daslang | C++ name | +|---|---| +| `def foo()` | `foo_` (no prefix — alnum, not keyword) | +| `def operator+()` | `_FuncAdd_` | +| `def \`testing\`equal\``() | `_FunctestingTickequalTick_` | +| `def float()` | `_Funcfloat_` (was rejected by lint pre-2026-05-14) | +| `def do()` | `_Funcdo_` | + +**`aotStructName`** (line 269-271) uses the same helper with `suffix=""` — struct names need no prefix because the C++-keyword-name lint guard at `ast_lint.cpp:307` is still in force (relaxing struct names would need a different emit strategy, since struct names embed 1:1 into `struct Foo { ... }` syntax). + +**`is_cpp_keyword(name : string) : bool`** is the daslang binding of C++ `isCppKeyword` (`src/builtin/module_builtin_ast.cpp:1572-1573`). + +## Questions +- How does the daslang AOT emitter handle C++ keyword names like `def float`? +- How are operator overloads (`def +`, `def ==`) mangled in AOT C++ output? +- Where in daslang is the AOT C++ function-name mangler? +- What's `aotSuffixNameEx` and when does it prepend the `_Func` prefix? +- What does `_FuncAdd_` mean in generated AOT C++? +- Is there a way to find an AOT-emitted C++ symbol from a daslang function name? +- Can I call `is_cpp_keyword` from a daslang macro? diff --git a/mouse-data/docs/dastest-failed-cant-invalid-prefix-expected-compile-failure-tests.md b/mouse-data/docs/dastest-failed-cant-invalid-prefix-expected-compile-failure-tests.md new file mode 100644 index 000000000..cafca9b50 --- /dev/null +++ b/mouse-data/docs/dastest-failed-cant-invalid-prefix-expected-compile-failure-tests.md @@ -0,0 +1,63 @@ +--- +slug: dastest-failed-cant-invalid-prefix-expected-compile-failure-tests +title: How does dastest treat `failed_*`, `cant_*`, `invalid_*` test files? +created: 2026-05-14 +last_verified: 2026-05-14 +links: [] +--- + +**Files in `tests/` whose basename starts with `failed_`, `cant_`, or `invalid_` are expected-compile-failure tests.** They declare which compile errors must fire, not what runtime behavior to test. + +**dastest skip:** `dastest/dastest.das:160-166` (inside `serializeAst`): + +```daslang +let base = base_name(file) +if (base |> starts_with("cant_") || base |> starts_with("failed_") || base |> starts_with("invalid_")) { + continue // skip AST serialization — they don't compile +} +``` + +**CMake skip:** Most `tests//CMakeLists.txt` GLOB filters exclude them from AOT compilation: +```cmake +list(FILTER AOT_FOO_FILES EXCLUDE REGEX "failed_") +``` +because trying to AOT-compile a file that intentionally fails to compile would just break the build. + +**The `expect` line** sits at the top of the file (after `options gen2`): + +```daslang +options gen2 +expect 30106:3, 30146, 30148, 30152, 30240, 30282 +``` + +- Comma-separated list of expected error codes. +- `code:N` syntax = "exactly N occurrences" (default 1). Above: three 30106 errors plus one each of the rest. +- Order doesn't matter; line numbers don't matter; what matters is that the compiler emits exactly those codes those many times. +- PASS when the actual error set matches the expect set. + +**Run via MCP:** + +``` +mcp__daslang__run_test tests/language/failed_reserved_names.das +``` + +emits the compile errors AND reports `PASS` (1 test, 1 passed) when codes match. + +**Maintenance when you relax or remove a compile-time guard:** + +1. If the now-passing case lives inside a `failed_*` file, delete that case from the file. +2. Drop the corresponding code from the `expect` line. +3. (Ideal) add a positive test elsewhere that exercises the now-legal form, ideally with AOT round-trip if codegen could break. + +Example (2026-05-14): when the function-name C++-keyword guard was dropped, `def do(a : int)` moved from `tests/language/failed_reserved_names.das` (with `30163` dropped from expect) to a new `tests/aot/test_cpp_keyword_names.das` as a positive case (exercising interpreter + AOT + JIT). + +The prefix is just convention so dastest and CMake know to skip them. `invalid_*` and `cant_*` behave identically to `failed_*`. + +## Questions +- What's the convention for daslang tests that expect a compile error? +- How does the `expect` line work in dastest? +- Why do `failed_*.das` files in tests/ not get AOT-compiled? +- What does `expect 30106:3` mean in a daslang test file? +- Where in dastest are expected-failure tests skipped from AST serialization? +- How do I write a test that asserts the compiler emits a specific error code? +- What should I do with a `failed_*` test after I relax the guard it was checking? diff --git a/mouse-data/docs/why-is-def-float-rejected-but-def-string-and-def-float2-allowed.md b/mouse-data/docs/why-is-def-float-rejected-but-def-string-and-def-float2-allowed.md new file mode 100644 index 000000000..be7d365a7 --- /dev/null +++ b/mouse-data/docs/why-is-def-float-rejected-but-def-string-and-def-float2-allowed.md @@ -0,0 +1,54 @@ +--- +slug: why-is-def-float-rejected-but-def-string-and-def-float2-allowed +title: Why is `def float(...)` rejected but `def string(...)` and `def float2(...)` allowed? +created: 2026-05-14 +last_verified: 2026-05-14 +links: [] +--- + +The asymmetry is **not** in the parser. The grammar at `src/parser/ds2_parser.ypp:1316-1408` says: + +``` +function_name + : NAME // user identifiers + | DAS_OPERATOR ... // operator overloads + | das_type_name // any type-name TOKEN + ; +``` + +`das_type_name` accepts every type-keyword token: `DAS_TBOOL`, `DAS_TSTRING`, `DAS_TINT`, `DAS_TINT2`, `DAS_TFLOAT`, `DAS_TFLOAT2`, `DAS_TDOUBLE`, etc. So at the parser level `def float`, `def int`, `def string`, `def float2`, `def double` all parse identically. + +**The rejection is a post-parse lint guard at `src/ast/ast_lint.cpp:867-884`** (pre-2026-05-14): + +```cpp +bool isValidFunctionName(const string & str) const { + return !isCppKeyword(str.c_str()); +} +virtual void preVisit ( Function * fn ) override { + if (!isValidFunctionName(fn->name)) + program->error("invalid function name " + fn->name, ..., CompilationError::invalid_function_name); + ... +} +``` + +`isCppKeyword` (`src/builtin/module_builtin_ast.cpp:68-84`) is a hardcoded **C++**-keyword set. That set contains `float`, `int`, `double`, `bool`, `char`, `void`, `do`, `class`, `new`, `delete`, ... It does NOT contain `string` (that's `std::string` in C++ — qualified, not a keyword), nor `float2`/`int2`/`uint3`/etc. (daslang-specific typedefs, not C++ keywords). That's exactly the observed asymmetry. + +The lint guard existed because the AOT C++ emitter would otherwise generate a literal `float(...)` C++ function which wouldn't compile. + +**Status (2026-05-14, PR landed):** the function-name guard was dropped. `daslib/aot_cpp.das:223-267` (`aotSuffixNameEx`) now detects C++ keywords and applies the same `_Func` prefix it already used for operator-character names — so `def float` AOTs to `_Funcfloat_` (a valid C++ identifier). The other 5 `isCppKeyword` lint sites stay (module/enum/enum-value/struct/struct-field names) — those emit 1:1 into C++ and need the guard. + +The 6 callsites that *still* reject C++ keywords (post-PR): +- `ast_lint.cpp:253` module name → error 30210 +- `ast_lint.cpp:263` enumeration name → 30146 +- `ast_lint.cpp:266` enumeration value → 30148 +- `ast_lint.cpp:307` structure name → 30240 +- `ast_lint.cpp:349` struct field / variable / arg name → 30152 / 30282 / 30106 + +`is_cpp_keyword(name : string) : bool` is exposed to daslang via `module_builtin_ast.cpp:1572-1573` if you ever need to call it from a macro or AOT emitter. + +## Questions +- Why does `def float(...)` give error 30163 "invalid function name" but `def string(...)` doesn't? +- Where does daslang reject function names that are C++ keywords? +- Is the parser the gate for `def ` overloads, or is it the lint pass? +- Can I define a daslang function called `int` or `double`? +- What error code is "invalid function name" and where is it emitted? diff --git a/src/ast/ast.cpp b/src/ast/ast.cpp index aa42de279..b51df0e13 100644 --- a/src/ast/ast.cpp +++ b/src/ast/ast.cpp @@ -2869,6 +2869,7 @@ namespace das { cexpr->values.push_back(val->clone()); } cexpr->recordNames = recordNames; + cexpr->shorthandRecordNames = shorthandRecordNames; if ( makeType ) { cexpr->makeType = new TypeDecl(*makeType); } diff --git a/src/ast/ast_infer_type.cpp b/src/ast/ast_infer_type.cpp index 6bc18aa7d..b74905e37 100644 --- a/src/ast/ast_infer_type.cpp +++ b/src/ast/ast_infer_type.cpp @@ -389,9 +389,26 @@ namespace das { } } } + + static void seedTupleShorthandFromTargetType(const TypeDeclPtr &targetType, Expression *init) { + if (!targetType || !init) return; + if (targetType->baseType != Type::tTuple) return; + if (!init->rtti_isMakeTuple()) return; + auto mkt = static_cast(init); + if (mkt->shorthandRecordNames.empty() || mkt->recordType) return; + if (targetType->argNames.size() != mkt->shorthandRecordNames.size()) return; + for (size_t i = 0, n = targetType->argNames.size(); i != n; ++i) { + if (targetType->argNames[i] != mkt->shorthandRecordNames[i]) return; + } + mkt->recordType = new TypeDecl(*targetType); + mkt->recordType->ref = false; + mkt->recordType->constant = false; + } + void InferTypes::preVisitGlobalLetInit(const VariablePtr &var, Expression *init) { Visitor::preVisitGlobalLetInit(var, init); globalVar = var; + seedTupleShorthandFromTargetType(var->type, init); } ExpressionPtr InferTypes::visitGlobalLetInit(const VariablePtr &var, Expression *init) { globalVar = nullptr; @@ -4192,8 +4209,20 @@ namespace das { if (scopes[i]->isClosure) break; } - if (expr->subexpr) + if (expr->subexpr) { markNoDiscard(expr->subexpr); + // unnamed -> named tuple shorthand at return position: + // seed the makeTuple's recordType from the enclosing return type + // (function->result, or innermost block's declared returnType) so + // the regular ExprMakeTuple infer path can promote the literal. + if (blocks.empty()) { + if (func) seedTupleShorthandFromTargetType(func->result, expr->subexpr); + } else { + auto block = blocks.back(); + if (block && block->returnType) + seedTupleShorthandFromTargetType(block->returnType, expr->subexpr); + } + } } ExpressionPtr InferTypes::visit(ExprReturn *expr) { if (blocks.size()) { @@ -4935,6 +4964,10 @@ namespace das { local.push_back(var); } } + void InferTypes::preVisitLetInit(ExprLet *expr, const VariablePtr &var, Expression *init) { + Visitor::preVisitLetInit(expr, var, init); + seedTupleShorthandFromTargetType(var->type, init); + } VariablePtr InferTypes::visitLet(ExprLet *expr, const VariablePtr &var, bool last) { if (var->type && var->type->isExprType()) { return Visitor::visitLet(expr, var, last); diff --git a/src/ast/ast_infer_type_function.cpp b/src/ast/ast_infer_type_function.cpp index 2986bbb75..de576da91 100644 --- a/src/ast/ast_infer_type_function.cpp +++ b/src/ast/ast_infer_type_function.cpp @@ -1083,6 +1083,42 @@ namespace das { int32_t *depth; }; + bool InferTypes::trySeedTupleShorthand(ExprLooksLikeCall *expr, bool visCheck) { + vector shorthandIndices; + for (size_t ai = 0, ais = expr->arguments.size(); ai != ais; ++ai) { + auto arg = expr->arguments[ai]; + if (!arg || !arg->rtti_isMakeTuple() || !arg->type) continue; + auto mkt = static_cast(arg); + if (mkt->shorthandRecordNames.empty() || mkt->recordType) continue; + if (mkt->type->baseType != Type::tTuple) continue; + if (mkt->type->argTypes.size() != mkt->shorthandRecordNames.size()) continue; + if (!mkt->type->argNames.empty()) continue; + shorthandIndices.push_back(ai); + } + if (shorthandIndices.empty()) return false; + vector hypTypes; + hypTypes.reserve(expr->arguments.size()); + for (auto arg : expr->arguments) hypTypes.push_back(arg ? arg->type : nullptr); + for (size_t idx : shorthandIndices) { + auto mkt = static_cast(expr->arguments[idx]); + auto hyp = new TypeDecl(*mkt->type); + hyp->argNames = mkt->shorthandRecordNames; + hypTypes[idx] = hyp; + } + MatchingFunctions hypFns, hypGens; + findMatchingFunctionsAndGenerics(hypFns, hypGens, expr->name, hypTypes, true, visCheck); + applyLSP(hypTypes, hypFns); + if (hypFns.size() + hypGens.size() != 1) return false; + for (size_t idx : shorthandIndices) { + auto mkt = static_cast(expr->arguments[idx]); + mkt->recordType = new TypeDecl(*mkt->type); + mkt->recordType->argNames = mkt->shorthandRecordNames; + mkt->recordType->ref = false; + mkt->recordType->constant = false; + } + return true; + } + FunctionPtr InferTypes::inferFunctionCall(ExprLooksLikeCall *expr, InferCallError cerr, Function *lookupFunction, bool failOnMissingCtor, bool visCheck) { if ( inferDepth > 1 ) { error("infer expression depth exceeded maximum allowed", "", "", @@ -1100,6 +1136,11 @@ namespace das { if (!lookupFunction) { findMatchingFunctionsAndGenerics(functions, generics, expr->name, types, true, visCheck); applyLSP(types, functions); + if (functions.empty() && generics.empty() && trySeedTupleShorthand(expr, visCheck)) { + reportAstChanged(); + if (func) func->notInferred(); + return nullptr; + } } else { functions.push_back(lookupFunction); } diff --git a/src/ast/ast_infer_type_make.cpp b/src/ast/ast_infer_type_make.cpp index 7836085ff..7f4aef038 100644 --- a/src/ast/ast_infer_type_make.cpp +++ b/src/ast/ast_infer_type_make.cpp @@ -1121,6 +1121,23 @@ namespace das { return Visitor::visit(expr); } } + if (expr->recordType && expr->recordType->baseType == Type::tTuple + && !expr->shorthandRecordNames.empty() + && expr->recordNames.empty() + && expr->recordType->argNames.size() == expr->shorthandRecordNames.size()) { + bool matches = true; + for (size_t i = 0, n = expr->shorthandRecordNames.size(); i != n; ++i) { + if (expr->shorthandRecordNames[i] != expr->recordType->argNames[i]) { + matches = false; + break; + } + } + if (matches) { + expr->recordNames = expr->shorthandRecordNames; + expr->shorthandRecordNames.clear(); + reportAstChanged(); + } + } if (expr->recordType) { if (!expr->recordType->isTuple()) { error("internal error. ExprMakeTuple with non-tuple record type", "", "", diff --git a/src/ast/ast_lint.cpp b/src/ast/ast_lint.cpp index 5dce702d4..01d86212c 100644 --- a/src/ast/ast_lint.cpp +++ b/src/ast/ast_lint.cpp @@ -864,9 +864,6 @@ namespace das { } } } - bool isValidFunctionName(const string & str) const { - return !isCppKeyword(str.c_str()); - } virtual bool canVisitFunction ( Function * fun ) override { return !fun->stub && !fun->isTemplate; // we don't do a thing with templates } @@ -878,10 +875,6 @@ namespace das { virtual void preVisit ( Function * fn ) override { Visitor::preVisit(fn); func = fn; - if (!isValidFunctionName(fn->name)) { - program->error("invalid function name " + fn->name, "", "", - fn->at, CompilationError::invalid_function_name ); - } if ( !fn->result->isVoid() && !fn->result->isAuto() ) { if ( !exprReturns(fn->body) ) { program->error("not all control paths return value", "", "", diff --git a/src/builtin/module_builtin_ast_serialize.cpp b/src/builtin/module_builtin_ast_serialize.cpp index 440618053..0fdfb9317 100644 --- a/src/builtin/module_builtin_ast_serialize.cpp +++ b/src/builtin/module_builtin_ast_serialize.cpp @@ -1891,7 +1891,7 @@ namespace das { void SerializeVisitor::preVisit ( ExprMakeTuple * expr ) { serializeMakeArray(expr); - ser << expr->isKeyValue << expr->recordNames; + ser << expr->isKeyValue << expr->recordNames << expr->shorthandRecordNames; } void SerializeVisitor::preVisit ( ExprArrayComprehension * expr ) { @@ -2668,8 +2668,7 @@ namespace das { } uint32_t AstSerializer::getVersion () { - // bumped for per-loop annotations on ExprFor/ExprWhile. - static constexpr uint32_t currentVersion = 82; + static constexpr uint32_t currentVersion = 83; return currentVersion; } diff --git a/src/parser/ds2_lexer.cpp b/src/parser/ds2_lexer.cpp index fd1b5a524..df733ae3d 100644 --- a/src/parser/ds2_lexer.cpp +++ b/src/parser/ds2_lexer.cpp @@ -1,6 +1,6 @@ -#line 1 "ds2_lexer.cpp" +#line 2 "ds2_lexer.cpp" -#line 3 "ds2_lexer.cpp" +#line 4 "ds2_lexer.cpp" #define YY_INT_ALIGNED short int @@ -1219,11 +1219,11 @@ void das_accept_cpp_comment ( vector & crdi, yyscan_t scanner, #define YY_EXTRA_TYPE das::DasParserState * -#line 1222 "ds2_lexer.cpp" +#line 1223 "ds2_lexer.cpp" #define YY_NO_UNISTD_H 1 /* %option debug */ -#line 1226 "ds2_lexer.cpp" +#line 1227 "ds2_lexer.cpp" #define INITIAL 0 #define normal 1 @@ -1508,7 +1508,7 @@ YY_DECL #line 78 "ds2_lexer.lpp" -#line 1511 "ds2_lexer.cpp" +#line 1512 "ds2_lexer.cpp" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3261,7 +3261,7 @@ YY_RULE_SETUP #line 786 "ds2_lexer.lpp" ECHO; YY_BREAK -#line 3264 "ds2_lexer.cpp" +#line 3265 "ds2_lexer.cpp" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(include): yyterminate(); diff --git a/src/parser/ds2_parser.cpp b/src/parser/ds2_parser.cpp index d65cbd480..ad8ade50b 100644 --- a/src/parser/ds2_parser.cpp +++ b/src/parser/ds2_parser.cpp @@ -1125,51 +1125,51 @@ static const yytype_int16 yyrline[] = 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, - 2173, 2179, 2180, 2181, 2182, 2183, 2196, 2205, 2206, 2207, - 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, - 2218, 2221, 2221, 2221, 2224, 2229, 2233, 2237, 2237, 2237, - 2242, 2245, 2249, 2249, 2249, 2254, 2257, 2258, 2259, 2260, - 2261, 2262, 2263, 2264, 2265, 2267, 2271, 2272, 2277, 2283, - 2289, 2298, 2301, 2304, 2313, 2314, 2315, 2316, 2317, 2318, - 2319, 2323, 2327, 2331, 2335, 2339, 2343, 2347, 2351, 2355, - 2362, 2363, 2367, 2368, 2369, 2373, 2374, 2378, 2379, 2380, - 2384, 2385, 2389, 2401, 2404, 2405, 2409, 2409, 2428, 2427, - 2442, 2441, 2458, 2470, 2479, 2489, 2490, 2491, 2492, 2493, - 2497, 2500, 2509, 2510, 2514, 2517, 2521, 2534, 2543, 2544, - 2548, 2551, 2555, 2568, 2569, 2573, 2579, 2585, 2594, 2597, - 2604, 2607, 2613, 2614, 2615, 2619, 2620, 2624, 2631, 2636, - 2645, 2651, 2662, 2669, 2678, 2681, 2684, 2691, 2694, 2699, - 2710, 2713, 2718, 2730, 2731, 2735, 2736, 2737, 2741, 2744, - 2747, 2747, 2767, 2770, 2770, 2788, 2793, 2801, 2802, 2806, - 2809, 2822, 2839, 2840, 2841, 2846, 2846, 2872, 2876, 2877, - 2878, 2882, 2892, 2895, 2901, 2902, 2906, 2907, 2911, 2912, - 2916, 2918, 2923, 2916, 2939, 2940, 2944, 2945, 2949, 2955, - 2956, 2957, 2958, 2962, 2963, 2964, 2968, 2971, 2977, 2979, - 2984, 2977, 3005, 3012, 3017, 3026, 3032, 3043, 3044, 3045, - 3046, 3047, 3048, 3049, 3050, 3051, 3052, 3053, 3054, 3055, - 3056, 3057, 3058, 3059, 3060, 3061, 3062, 3063, 3064, 3065, - 3066, 3067, 3068, 3069, 3073, 3074, 3075, 3076, 3077, 3078, - 3079, 3080, 3084, 3095, 3099, 3106, 3118, 3125, 3131, 3140, - 3145, 3155, 3165, 3175, 3188, 3189, 3190, 3191, 3192, 3196, - 3200, 3200, 3200, 3214, 3215, 3219, 3223, 3230, 3234, 3238, - 3242, 3249, 3252, 3270, 3271, 3275, 3276, 3277, 3278, 3279, - 3279, 3279, 3283, 3288, 3295, 3302, 3302, 3309, 3309, 3316, - 3320, 3324, 3329, 3334, 3339, 3344, 3348, 3352, 3357, 3361, - 3365, 3370, 3370, 3370, 3376, 3383, 3383, 3383, 3388, 3388, - 3388, 3394, 3394, 3394, 3399, 3404, 3404, 3404, 3409, 3409, - 3409, 3418, 3423, 3423, 3423, 3428, 3428, 3428, 3437, 3442, - 3442, 3442, 3447, 3447, 3447, 3456, 3456, 3456, 3462, 3462, - 3462, 3471, 3474, 3485, 3501, 3503, 3508, 3513, 3501, 3539, - 3541, 3546, 3552, 3539, 3578, 3580, 3585, 3590, 3578, 3631, - 3632, 3633, 3634, 3635, 3636, 3637, 3641, 3642, 3643, 3644, - 3645, 3649, 3656, 3663, 3669, 3675, 3682, 3689, 3695, 3704, - 3707, 3713, 3721, 3726, 3733, 3738, 3744, 3745, 3749, 3750, - 3754, 3754, 3754, 3762, 3762, 3762, 3769, 3769, 3769, 3780, - 3780, 3780, 3787, 3787, 3787, 3798, 3804, 3804, 3804, 3818, - 3837, 3837, 3837, 3847, 3847, 3847, 3861, 3861, 3861, 3875, - 3884, 3884, 3884, 3904, 3911, 3911, 3911, 3921, 3924, 3935, - 3941, 3964, 3972, 3992, 4017, 4018, 4022, 4023, 4028, 4031, - 4041 + 2173, 2179, 2180, 2181, 2182, 2183, 2198, 2207, 2208, 2209, + 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219, + 2220, 2223, 2223, 2223, 2226, 2231, 2235, 2239, 2239, 2239, + 2244, 2247, 2251, 2251, 2251, 2256, 2259, 2260, 2261, 2262, + 2263, 2264, 2265, 2266, 2267, 2269, 2273, 2274, 2279, 2285, + 2291, 2300, 2303, 2306, 2315, 2316, 2317, 2318, 2319, 2320, + 2321, 2325, 2329, 2333, 2337, 2341, 2345, 2349, 2353, 2357, + 2364, 2365, 2369, 2370, 2371, 2375, 2376, 2380, 2381, 2382, + 2386, 2387, 2391, 2403, 2406, 2407, 2411, 2411, 2430, 2429, + 2444, 2443, 2460, 2472, 2481, 2491, 2492, 2493, 2494, 2495, + 2499, 2502, 2511, 2512, 2516, 2519, 2523, 2536, 2545, 2546, + 2550, 2553, 2557, 2570, 2571, 2575, 2581, 2587, 2596, 2599, + 2606, 2609, 2615, 2616, 2617, 2621, 2622, 2626, 2633, 2638, + 2647, 2653, 2664, 2671, 2680, 2683, 2686, 2693, 2696, 2701, + 2712, 2715, 2720, 2732, 2733, 2737, 2738, 2739, 2743, 2746, + 2749, 2749, 2769, 2772, 2772, 2790, 2795, 2803, 2804, 2808, + 2811, 2824, 2841, 2842, 2843, 2848, 2848, 2874, 2878, 2879, + 2880, 2884, 2894, 2897, 2903, 2904, 2908, 2909, 2913, 2914, + 2918, 2920, 2925, 2918, 2941, 2942, 2946, 2947, 2951, 2957, + 2958, 2959, 2960, 2964, 2965, 2966, 2970, 2973, 2979, 2981, + 2986, 2979, 3007, 3014, 3019, 3028, 3034, 3045, 3046, 3047, + 3048, 3049, 3050, 3051, 3052, 3053, 3054, 3055, 3056, 3057, + 3058, 3059, 3060, 3061, 3062, 3063, 3064, 3065, 3066, 3067, + 3068, 3069, 3070, 3071, 3075, 3076, 3077, 3078, 3079, 3080, + 3081, 3082, 3086, 3097, 3101, 3108, 3120, 3127, 3133, 3142, + 3147, 3157, 3167, 3177, 3190, 3191, 3192, 3193, 3194, 3198, + 3202, 3202, 3202, 3216, 3217, 3221, 3225, 3232, 3236, 3240, + 3244, 3251, 3254, 3272, 3273, 3277, 3278, 3279, 3280, 3281, + 3281, 3281, 3285, 3290, 3297, 3304, 3304, 3311, 3311, 3318, + 3322, 3326, 3331, 3336, 3341, 3346, 3350, 3354, 3359, 3363, + 3367, 3372, 3372, 3372, 3378, 3385, 3385, 3385, 3390, 3390, + 3390, 3396, 3396, 3396, 3401, 3406, 3406, 3406, 3411, 3411, + 3411, 3420, 3425, 3425, 3425, 3430, 3430, 3430, 3439, 3444, + 3444, 3444, 3449, 3449, 3449, 3458, 3458, 3458, 3464, 3464, + 3464, 3473, 3476, 3487, 3503, 3505, 3510, 3515, 3503, 3541, + 3543, 3548, 3554, 3541, 3580, 3582, 3587, 3592, 3580, 3633, + 3634, 3635, 3636, 3637, 3638, 3639, 3643, 3644, 3645, 3646, + 3647, 3651, 3658, 3665, 3671, 3677, 3684, 3691, 3697, 3706, + 3709, 3715, 3723, 3728, 3735, 3740, 3746, 3747, 3751, 3752, + 3756, 3756, 3756, 3764, 3764, 3764, 3771, 3771, 3771, 3782, + 3782, 3782, 3789, 3789, 3789, 3800, 3806, 3806, 3806, 3820, + 3839, 3839, 3839, 3849, 3849, 3849, 3863, 3863, 3863, 3877, + 3886, 3886, 3886, 3906, 3913, 3913, 3913, 3923, 3926, 3937, + 3943, 3966, 3974, 3994, 4019, 4020, 4024, 4025, 4030, 4033, + 4043 }; #endif @@ -8260,10 +8260,12 @@ YYLTYPE yylloc = yyloc_default; if ( (yyvsp[-2].pExpression)->rtti_isSequence() ) { auto mkt = new ExprMakeTuple(tokAt(scanner,(yylsp[-2]))); mkt->values = sequenceToList((yyvsp[-2].pExpression)); + mkt->shorthandRecordNames = ast_tupleCollectShorthandNames(mkt->values); (yyval.pExpression) = mkt; } else if ( (yyvsp[-1].b) ) { auto mkt = new ExprMakeTuple(tokAt(scanner,(yylsp[-2]))); mkt->values.push_back((yyvsp[-2].pExpression)); + mkt->shorthandRecordNames = ast_tupleCollectShorthandNames(mkt->values); (yyval.pExpression) = mkt; } else { (yyval.pExpression) = (yyvsp[-2].pExpression); diff --git a/src/parser/ds2_parser.ypp b/src/parser/ds2_parser.ypp index 225f6d47b..314939a10 100644 --- a/src/parser/ds2_parser.ypp +++ b/src/parser/ds2_parser.ypp @@ -2184,10 +2184,12 @@ expr_no_bracket if ( $subexpr->rtti_isSequence() ) { auto mkt = new ExprMakeTuple(tokAt(scanner,@subexpr)); mkt->values = sequenceToList($subexpr); + mkt->shorthandRecordNames = ast_tupleCollectShorthandNames(mkt->values); $$ = mkt; } else if ( $comma ) { auto mkt = new ExprMakeTuple(tokAt(scanner,@subexpr)); mkt->values.push_back($subexpr); + mkt->shorthandRecordNames = ast_tupleCollectShorthandNames(mkt->values); $$ = mkt; } else { $$ = $subexpr; diff --git a/src/parser/ds_parser.cpp b/src/parser/ds_parser.cpp index 6b8a6d472..cd356da0e 100644 --- a/src/parser/ds_parser.cpp +++ b/src/parser/ds_parser.cpp @@ -1126,51 +1126,51 @@ static const yytype_int16 yyrline[] = 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, - 2213, 2214, 2215, 2216, 2217, 2230, 2239, 2240, 2241, 2242, - 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2253, 2256, - 2257, 2260, 2260, 2260, 2263, 2268, 2272, 2276, 2276, 2276, - 2281, 2284, 2288, 2288, 2288, 2293, 2296, 2297, 2298, 2299, - 2300, 2301, 2302, 2303, 2304, 2306, 2310, 2311, 2316, 2320, - 2321, 2322, 2323, 2324, 2325, 2326, 2330, 2334, 2338, 2342, - 2346, 2350, 2354, 2358, 2362, 2369, 2370, 2371, 2375, 2376, - 2377, 2381, 2382, 2386, 2387, 2388, 2392, 2393, 2397, 2408, - 2411, 2414, 2414, 2418, 2418, 2437, 2436, 2452, 2451, 2465, - 2474, 2486, 2495, 2505, 2506, 2507, 2508, 2509, 2513, 2516, - 2525, 2526, 2530, 2533, 2536, 2551, 2560, 2561, 2565, 2568, - 2571, 2584, 2585, 2589, 2595, 2601, 2610, 2613, 2620, 2623, - 2629, 2630, 2631, 2635, 2636, 2640, 2647, 2652, 2661, 2667, - 2678, 2681, 2686, 2691, 2699, 2710, 2713, 2716, 2716, 2736, - 2737, 2741, 2742, 2743, 2747, 2750, 2750, 2769, 2772, 2775, - 2790, 2809, 2810, 2811, 2816, 2816, 2842, 2843, 2847, 2848, - 2848, 2852, 2853, 2854, 2858, 2868, 2873, 2868, 2885, 2890, - 2885, 2905, 2906, 2910, 2911, 2915, 2921, 2922, 2923, 2924, - 2928, 2929, 2930, 2934, 2937, 2943, 2948, 2943, 2968, 2975, - 2980, 2989, 2995, 3006, 3007, 3008, 3009, 3010, 3011, 3012, - 3013, 3014, 3015, 3016, 3017, 3018, 3019, 3020, 3021, 3022, - 3023, 3024, 3025, 3026, 3027, 3028, 3029, 3030, 3031, 3032, - 3036, 3037, 3038, 3039, 3040, 3041, 3042, 3043, 3047, 3058, - 3062, 3069, 3081, 3088, 3094, 3103, 3108, 3111, 3121, 3134, - 3135, 3136, 3137, 3138, 3142, 3146, 3146, 3146, 3160, 3161, - 3165, 3169, 3176, 3180, 3187, 3188, 3189, 3190, 3191, 3205, - 3211, 3211, 3211, 3215, 3220, 3227, 3227, 3234, 3238, 3242, - 3247, 3252, 3257, 3262, 3266, 3270, 3275, 3279, 3283, 3288, - 3288, 3288, 3294, 3301, 3301, 3301, 3306, 3306, 3306, 3312, - 3312, 3312, 3317, 3322, 3322, 3322, 3327, 3327, 3327, 3336, - 3341, 3341, 3341, 3346, 3346, 3346, 3355, 3360, 3360, 3360, - 3365, 3365, 3365, 3374, 3374, 3374, 3380, 3380, 3380, 3389, - 3392, 3403, 3419, 3419, 3424, 3429, 3419, 3454, 3454, 3459, - 3465, 3454, 3490, 3490, 3495, 3500, 3490, 3540, 3541, 3542, - 3543, 3544, 3548, 3555, 3562, 3568, 3574, 3581, 3588, 3594, - 3603, 3606, 3612, 3620, 3625, 3632, 3637, 3644, 3649, 3655, - 3656, 3660, 3661, 3666, 3667, 3671, 3672, 3676, 3677, 3681, - 3682, 3683, 3687, 3688, 3689, 3693, 3694, 3698, 3704, 3711, - 3719, 3726, 3734, 3743, 3743, 3743, 3751, 3751, 3751, 3758, - 3758, 3758, 3769, 3769, 3769, 3780, 3783, 3789, 3803, 3809, - 3815, 3821, 3821, 3821, 3835, 3840, 3847, 3866, 3871, 3878, - 3878, 3878, 3888, 3888, 3888, 3902, 3902, 3902, 3916, 3925, - 3925, 3925, 3945, 3952, 3952, 3952, 3962, 3967, 3974, 3977, - 3983, 4002, 4011, 4019, 4039, 4064, 4065, 4069, 4070, 4075, - 4078, 4081, 4084, 4087, 4090 + 2213, 2214, 2215, 2216, 2217, 2232, 2241, 2242, 2243, 2244, + 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2255, 2258, + 2259, 2262, 2262, 2262, 2265, 2270, 2274, 2278, 2278, 2278, + 2283, 2286, 2290, 2290, 2290, 2295, 2298, 2299, 2300, 2301, + 2302, 2303, 2304, 2305, 2306, 2308, 2312, 2313, 2318, 2322, + 2323, 2324, 2325, 2326, 2327, 2328, 2332, 2336, 2340, 2344, + 2348, 2352, 2356, 2360, 2364, 2371, 2372, 2373, 2377, 2378, + 2379, 2383, 2384, 2388, 2389, 2390, 2394, 2395, 2399, 2410, + 2413, 2416, 2416, 2420, 2420, 2439, 2438, 2454, 2453, 2467, + 2476, 2488, 2497, 2507, 2508, 2509, 2510, 2511, 2515, 2518, + 2527, 2528, 2532, 2535, 2538, 2553, 2562, 2563, 2567, 2570, + 2573, 2586, 2587, 2591, 2597, 2603, 2612, 2615, 2622, 2625, + 2631, 2632, 2633, 2637, 2638, 2642, 2649, 2654, 2663, 2669, + 2680, 2683, 2688, 2693, 2701, 2712, 2715, 2718, 2718, 2738, + 2739, 2743, 2744, 2745, 2749, 2752, 2752, 2771, 2774, 2777, + 2792, 2811, 2812, 2813, 2818, 2818, 2844, 2845, 2849, 2850, + 2850, 2854, 2855, 2856, 2860, 2870, 2875, 2870, 2887, 2892, + 2887, 2907, 2908, 2912, 2913, 2917, 2923, 2924, 2925, 2926, + 2930, 2931, 2932, 2936, 2939, 2945, 2950, 2945, 2970, 2977, + 2982, 2991, 2997, 3008, 3009, 3010, 3011, 3012, 3013, 3014, + 3015, 3016, 3017, 3018, 3019, 3020, 3021, 3022, 3023, 3024, + 3025, 3026, 3027, 3028, 3029, 3030, 3031, 3032, 3033, 3034, + 3038, 3039, 3040, 3041, 3042, 3043, 3044, 3045, 3049, 3060, + 3064, 3071, 3083, 3090, 3096, 3105, 3110, 3113, 3123, 3136, + 3137, 3138, 3139, 3140, 3144, 3148, 3148, 3148, 3162, 3163, + 3167, 3171, 3178, 3182, 3189, 3190, 3191, 3192, 3193, 3207, + 3213, 3213, 3213, 3217, 3222, 3229, 3229, 3236, 3240, 3244, + 3249, 3254, 3259, 3264, 3268, 3272, 3277, 3281, 3285, 3290, + 3290, 3290, 3296, 3303, 3303, 3303, 3308, 3308, 3308, 3314, + 3314, 3314, 3319, 3324, 3324, 3324, 3329, 3329, 3329, 3338, + 3343, 3343, 3343, 3348, 3348, 3348, 3357, 3362, 3362, 3362, + 3367, 3367, 3367, 3376, 3376, 3376, 3382, 3382, 3382, 3391, + 3394, 3405, 3421, 3421, 3426, 3431, 3421, 3456, 3456, 3461, + 3467, 3456, 3492, 3492, 3497, 3502, 3492, 3542, 3543, 3544, + 3545, 3546, 3550, 3557, 3564, 3570, 3576, 3583, 3590, 3596, + 3605, 3608, 3614, 3622, 3627, 3634, 3639, 3646, 3651, 3657, + 3658, 3662, 3663, 3668, 3669, 3673, 3674, 3678, 3679, 3683, + 3684, 3685, 3689, 3690, 3691, 3695, 3696, 3700, 3706, 3713, + 3721, 3728, 3736, 3745, 3745, 3745, 3753, 3753, 3753, 3760, + 3760, 3760, 3771, 3771, 3771, 3782, 3785, 3791, 3805, 3811, + 3817, 3823, 3823, 3823, 3837, 3842, 3849, 3868, 3873, 3880, + 3880, 3880, 3890, 3890, 3890, 3904, 3904, 3904, 3918, 3927, + 3927, 3927, 3947, 3954, 3954, 3954, 3964, 3969, 3976, 3979, + 3985, 4004, 4013, 4021, 4041, 4066, 4067, 4071, 4072, 4077, + 4080, 4083, 4086, 4089, 4092 }; #endif @@ -9467,10 +9467,12 @@ YYLTYPE yylloc = yyloc_default; if ( (yyvsp[-2].pExpression)->rtti_isSequence() ) { auto mkt = new ExprMakeTuple(tokAt(scanner,(yylsp[-2]))); mkt->values = sequenceToList((yyvsp[-2].pExpression)); + mkt->shorthandRecordNames = ast_tupleCollectShorthandNames(mkt->values); (yyval.pExpression) = mkt; } else if ( (yyvsp[-1].b) ) { auto mkt = new ExprMakeTuple(tokAt(scanner,(yylsp[-2]))); mkt->values.push_back((yyvsp[-2].pExpression)); + mkt->shorthandRecordNames = ast_tupleCollectShorthandNames(mkt->values); (yyval.pExpression) = mkt; } else { (yyval.pExpression) = (yyvsp[-2].pExpression); diff --git a/src/parser/ds_parser.ypp b/src/parser/ds_parser.ypp index 366ddd9c8..6717634f6 100644 --- a/src/parser/ds_parser.ypp +++ b/src/parser/ds_parser.ypp @@ -2218,10 +2218,12 @@ expr if ( $subexpr->rtti_isSequence() ) { auto mkt = new ExprMakeTuple(tokAt(scanner,@subexpr)); mkt->values = sequenceToList($subexpr); + mkt->shorthandRecordNames = ast_tupleCollectShorthandNames(mkt->values); $$ = mkt; } else if ( $comma ) { auto mkt = new ExprMakeTuple(tokAt(scanner,@subexpr)); mkt->values.push_back($subexpr); + mkt->shorthandRecordNames = ast_tupleCollectShorthandNames(mkt->values); $$ = mkt; } else { $$ = $subexpr; diff --git a/src/parser/lex2.yy.h b/src/parser/lex2.yy.h index 64dbe1ebb..4b370cd3b 100644 --- a/src/parser/lex2.yy.h +++ b/src/parser/lex2.yy.h @@ -2,9 +2,9 @@ #define das2_yyHEADER_H 1 #define das2_yyIN_HEADER 1 -#line 5 "lex2.yy.h" +#line 6 "lex2.yy.h" -#line 7 "lex2.yy.h" +#line 8 "lex2.yy.h" #define YY_INT_ALIGNED short int @@ -723,6 +723,6 @@ extern int yylex \ #line 786 "ds2_lexer.lpp" -#line 726 "lex2.yy.h" +#line 727 "lex2.yy.h" #undef das2_yyIN_HEADER #endif /* das2_yyHEADER_H */ diff --git a/src/parser/parser_impl.cpp b/src/parser/parser_impl.cpp index 4fa48efe2..9ff906718 100644 --- a/src/parser/parser_impl.cpp +++ b/src/parser/parser_impl.cpp @@ -1273,6 +1273,18 @@ namespace das { return int(out - buf); } + vector ast_tupleCollectShorthandNames ( const vector & values ) { + vector names; + names.reserve(values.size()); + for ( auto val : values ) { + if ( !val || !val->rtti_isVar() ) return {}; + auto ev = static_cast(val); + if ( ev->name.find("::") != string::npos ) return {}; + names.push_back(ev->name); + } + return names; + } + Expression * ast_makeStructToMakeVariant ( MakeStruct * decl, const LineInfo & locAt ) { auto mks = new ExprMakeStruct(locAt); if ( decl ) { diff --git a/src/parser/parser_impl.h b/src/parser/parser_impl.h index e484cdbb4..565229ad3 100644 --- a/src/parser/parser_impl.h +++ b/src/parser/parser_impl.h @@ -119,4 +119,5 @@ namespace das { Expression * ast_makeStructToMakeVariant ( MakeStruct * decl, const LineInfo & locAt ); CaptureEntry * ast_makeCaptureEntry ( yyscan_t scanner, const LineInfo & at, const string & op, const string & name ); Expression * ast_makeMoveArgument ( yyscan_t scanner, Expression * expr, const LineInfo & at ); + vector ast_tupleCollectShorthandNames ( const vector & values ); } \ No newline at end of file diff --git a/tests/aot/test_cpp_keyword_names.das b/tests/aot/test_cpp_keyword_names.das new file mode 100644 index 000000000..bcbc322a6 --- /dev/null +++ b/tests/aot/test_cpp_keyword_names.das @@ -0,0 +1,39 @@ +options gen2 +require dastest/testing_boost public + +struct Foo { + a : int +} + +def float(h : Foo) : int { + return h.a + 1 +} + +def int(h : Foo) : float { + return float(h.a) * 2.0 +} + +def double(h : Foo) : int { + return h.a + h.a +} + +def do(h : Foo) : int { + return h.a * 10 +} + +[test] +def test_cpp_keyword_function_names(t : T?) { + let h = Foo(a = 21) + t |> run("def float") @(t : T?) { + t |> equal(float(Foo(a = 41)), 42) + } + t |> run("def int") @(t : T?) { + t |> equal(int(Foo(a = 3)), 6.0) + } + t |> run("def double") @(t : T?) { + t |> equal(double(h), 42) + } + t |> run("def do") @(t : T?) { + t |> equal(do(Foo(a = 4)), 40) + } +} diff --git a/tests/language/failed_reserved_names.das b/tests/language/failed_reserved_names.das index af75db375..956b9e901 100644 --- a/tests/language/failed_reserved_names.das +++ b/tests/language/failed_reserved_names.das @@ -1,9 +1,9 @@ // reserved identifier names // verifies compiler rejects using reserved words (like 'register', 'do') -// as enum names, enum values, struct names, struct fields, function names, +// as enum names, enum values, struct names, struct fields, // function args, local variables, and lambda parameters options gen2 -expect 30106:3, 30146, 30148, 30152, 30163, 30240, 30282 +expect 30106:3, 30146, 30148, 30152, 30240, 30282 enum do {// 30116: invalid name foo @@ -23,10 +23,6 @@ struct register {// 30116: invalid name foo : int } -def do(a : int) {// 30116: invalid name - return a -} - def foo(register : int) {// 30116: invalid name return register } diff --git a/tests/language/failed_tuple_shorthand_mismatch.das b/tests/language/failed_tuple_shorthand_mismatch.das new file mode 100644 index 000000000..c898135af --- /dev/null +++ b/tests/language/failed_tuple_shorthand_mismatch.das @@ -0,0 +1,11 @@ +options gen2 +expect 30341 // function_not_found: shorthand var names don't match target tuple field names + +require dastest/testing_boost public + +def fail_name_mismatch() { + var arr : array> + let foo = 1 + let bar = 1.1 + arr |> push((foo, bar)) +} diff --git a/tests/language/failed_tuple_shorthand_return_mismatch.das b/tests/language/failed_tuple_shorthand_return_mismatch.das new file mode 100644 index 000000000..1f2e740eb --- /dev/null +++ b/tests/language/failed_tuple_shorthand_return_mismatch.das @@ -0,0 +1,10 @@ +options gen2 +expect 30343 // incompatible return type: shorthand var names don't match declared named-tuple result + +require dastest/testing_boost public + +def fail_return_name_mismatch() : tuple { + let foo = 1 + let bar = 1.1 + return (foo, bar) +} diff --git a/tests/language/tuple.das b/tests/language/tuple.das index 7f77010c1..e631cff62 100644 --- a/tests/language/tuple.das +++ b/tests/language/tuple.das @@ -12,6 +12,26 @@ def testF(arg : tuple) { return arg.f == 3.14 } +def overload_pick(x : tuple) { + return 1 +} + +def overload_pick(x : tuple) { + return 2 +} + +// return-position shorthand: positional bare-var tuple promotes to the +// function's declared named-tuple result type +def make_hit_return(eid : int; distSq : float) : tuple { + return (eid, distSq) +} + +def make_hit_locals() : tuple { + let eid = 17 + let distSq = 4.25 + return (eid, distSq) +} + [test] def test_tuple(t : T?) { t |> run("basic creation and named fields") @(t : T?) { @@ -63,6 +83,74 @@ def test_tuple(t : T?) { t |> equal(mkt._0, 1) t |> equal(mkt._1, 2.0) } + t |> run("shorthand named into array of named tuples") @(t : T?) { + var arr : array> + let eid = 7 + let distSq = 2.5 + arr |> push((eid, distSq)) + t |> equal(length(arr), 1) + t |> equal(arr[0].eid, 7) + t |> equal(arr[0].distSq, 2.5) + } + t |> run("shorthand named single element") @(t : T?) { + let eid = 9 + var tup : tuple = (eid,) + t |> equal(tup.eid, 9) + } + t |> run("shorthand named via typed var init") @(t : T?) { + let eid = 11 + let distSq = 4.5 + var tup : tuple = (eid, distSq) + t |> equal(tup.eid, 11) + t |> equal(tup.distSq, 4.5) + } + t |> run("unnamed target keeps unnamed (no shorthand)") @(t : T?) { + var arr : array> + let k = 11 + let v = 4.5 + arr |> push((k, v)) // backward compat: target is unnamed, no promotion + t |> equal(arr[0]._0, 11) + t |> equal(arr[0]._1, 4.5) + } + t |> run("overload resolution prefers unnamed tuple when both present") @(t : T?) { + var x = 123 + var y = 321. + // both `overload_pick(tuple)` and `overload_pick(tuple)` visible. + // `(x, y)` is unnamed `tuple` — exact match unnamed overload. + // shorthand-to-named promotion is fallback-only (fires when no candidate matches), + // so unnamed overload wins → returns 1. + t |> equal(overload_pick((x, y)), 1) + } + t |> run("explicit named tuple literal picks named overload") @(t : T?) { + var x = 123 + var y = 321. + // `(x=x, y=y)` parser tag as named tuple `tuple` directly. + // Exact match named overload → returns 2. + t |> equal(overload_pick((x = x, y = y)), 2) + } + t |> run("mixed expression tuple stays unnamed") @(t : T?) { + var arr : array> + let a = 1 + arr |> push((a, a + 1)) // 2nd elem not bare ExprVar → never tagged + t |> equal(arr[0]._0, 1) + t |> equal(arr[0]._1, 2) + } + t |> run("shorthand named via return from named-tuple-typed fn") @(t : T?) { + let r = make_hit_return(7, 2.5) + t |> equal(r.eid, 7) + t |> equal(r.distSq, 2.5) + } + t |> run("shorthand named via return using local bare vars") @(t : T?) { + let r = make_hit_locals() + t |> equal(r.eid, 17) + t |> equal(r.distSq, 4.25) + } + t |> run("return-promoted tuple pushes into named-tuple array") @(t : T?) { + var arr : array> + arr |> push(make_hit_return(3, 1.5)) + t |> equal(arr[0].eid, 3) + t |> equal(arr[0].distSq, 1.5) + } t |> run("fixed array of tuples") @(t : T?) { let mkta = fixed_array>((1, 2.0), (3, 4.0)) t |> equal(mkta[0]._0, 1) diff --git a/tutorials/language/11_tuples_and_variants.das b/tutorials/language/11_tuples_and_variants.das index e18c20e66..8e64ee96b 100644 --- a/tutorials/language/11_tuples_and_variants.das +++ b/tutorials/language/11_tuples_and_variants.das @@ -66,6 +66,34 @@ def main { // Named fields are also accessible via _0, _1 print("point._0 = {p._0}\n") + // --- Shorthand: unnamed -> named tuple promotion --- + // When the target type is a named tuple and every element of the literal + // is a bare variable reference whose name matches the field name in order, + // the compiler promotes the unnamed literal to the named tuple. + let eid = 7 + let distSq = 2.5 + var hit : tuple = (eid, distSq) + print("hit.eid = {hit.eid}, hit.distSq = {hit.distSq}\n") + + // Same shorthand works when pushing into an array of named tuples. + var hits : array> + hits |> push((eid, distSq)) + print("hits[0].eid = {hits[0].eid}\n") + + // Mixed expressions never promote — element must be a bare variable. + var raw : array> + let a = 1 + raw |> push((a, a + 1)) // stays unnamed; reachable via _0/_1 + print("raw[0] = ({raw[0]._0}, {raw[0]._1})\n") + + // Promotion is fallback-only: if an unnamed overload also matches, it wins. + // Use the explicit (name = value) literal to force the named overload. + + // Promotion also fires in return position when the function's declared + // result is a named tuple — see make_hit() defined below. + let made = make_hit(8, 9.5) + print("made.eid = {made.eid}, made.distSq = {made.distSq}\n") + // --- Tuple with tuple() constructor --- let triple = tuple(1, 2.0, "three") print("triple = ({triple._0}, {triple._1}, {triple._2})\n") @@ -164,11 +192,21 @@ def divmod_tuple(a, b : int) : tuple { return (a / b, a % b) } +// Return-position shorthand: the bare-var positional literal promotes to the +// declared named-tuple result type when the names match in order. +def make_hit(eid : int; distSq : float) : tuple { + return (eid, distSq) +} + // output: // pair = (42, 3.14) // modified pair._0 = 100 // point = (3, 4) // point._0 = 3 +// hit.eid = 7, hit.distSq = 2.5 +// hits[0].eid = 7 +// raw[0] = (1, 2) +// made.eid = 8, made.distSq = 9.5 // triple = (1, 2, three) // kv = (age, 25) // one => 1 diff --git a/utils/dasFormatter/ds_parser.cpp b/utils/dasFormatter/ds_parser.cpp index ab43f6790..0d581f196 100644 --- a/utils/dasFormatter/ds_parser.cpp +++ b/utils/dasFormatter/ds_parser.cpp @@ -74,42 +74,42 @@ #define yynerrs das_yynerrs /* First part of user prologue. */ - - #define das_yyparse fmt_yyparse // We can't change flex prefix, since we have only one lexer file, seems like to define is the best way - - #include "daScript/misc/platform.h" - #include "daScript/simulate/debug_info.h" - #include "daScript/ast/compilation_errors.h" - - #ifdef _MSC_VER - #pragma warning(disable:4262) - #pragma warning(disable:4127) - #pragma warning(disable:4702) - #endif - - using namespace das; - - union DAS_YYSTYPE; - struct DAS_YYLTYPE; - - #define YY_NO_UNISTD_H - #include "../src/parser/lex.yy.h" - - void das_yyerror ( DAS_YYLTYPE * lloc, yyscan_t scanner, const string & error ); - void das_yyfatalerror ( DAS_YYLTYPE * lloc, yyscan_t scanner, const string & error, CompilationError cerr ); - int yylex ( DAS_YYSTYPE *lvalp, DAS_YYLTYPE *llocp, yyscan_t scanner ); - void yybegin ( const char * str ); - - void das_yybegin_reader ( yyscan_t yyscanner ); - void das_yyend_reader ( yyscan_t yyscanner ); - void das_accept_sequence ( yyscan_t yyscanner, const char * seq, size_t seqLen, int lineNo, FileInfo * info ); - - namespace das { class Module; } - void das_collect_keywords ( das::Module * mod, yyscan_t yyscanner ); - void das_strfmt ( yyscan_t yyscanner ); - - #undef yyextra - #define yyextra (*((das::DasParserState **)(scanner))) + + #define das_yyparse fmt_yyparse // We can't change flex prefix, since we have only one lexer file, seems like to define is the best way + + #include "daScript/misc/platform.h" + #include "daScript/simulate/debug_info.h" + #include "daScript/ast/compilation_errors.h" + + #ifdef _MSC_VER + #pragma warning(disable:4262) + #pragma warning(disable:4127) + #pragma warning(disable:4702) + #endif + + using namespace das; + + union DAS_YYSTYPE; + struct DAS_YYLTYPE; + + #define YY_NO_UNISTD_H + #include "../src/parser/lex.yy.h" + + void das_yyerror ( DAS_YYLTYPE * lloc, yyscan_t scanner, const string & error ); + void das_yyfatalerror ( DAS_YYLTYPE * lloc, yyscan_t scanner, const string & error, CompilationError cerr ); + int yylex ( DAS_YYSTYPE *lvalp, DAS_YYLTYPE *llocp, yyscan_t scanner ); + void yybegin ( const char * str ); + + void das_yybegin_reader ( yyscan_t yyscanner ); + void das_yyend_reader ( yyscan_t yyscanner ); + void das_accept_sequence ( yyscan_t yyscanner, const char * seq, size_t seqLen, int lineNo, FileInfo * info ); + + namespace das { class Module; } + void das_collect_keywords ( das::Module * mod, yyscan_t yyscanner ); + void das_strfmt ( yyscan_t yyscanner ); + + #undef yyextra + #define yyextra (*((das::DasParserState **)(scanner))) # ifndef YY_CAST @@ -1129,50 +1129,50 @@ static const yytype_int16 yyrline[] = 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2341, 2342, 2343, 2344, 2345, - 2346, 2347, 2348, 2362, 2363, 2364, 2365, 2366, 2369, 2372, - 2373, 2373, 2373, 2376, 2381, 2385, 2389, 2389, 2389, 2394, - 2397, 2401, 2401, 2401, 2406, 2409, 2410, 2411, 2412, 2413, - 2414, 2415, 2416, 2417, 2419, 2423, 2431, 2436, 2440, 2449, - 2450, 2451, 2452, 2453, 2454, 2455, 2459, 2463, 2467, 2471, - 2475, 2479, 2483, 2487, 2491, 2498, 2499, 2508, 2512, 2513, - 2514, 2518, 2519, 2523, 2524, 2525, 2529, 2530, 2534, 2545, - 2546, 2547, 2548, 2553, 2556, 2556, 2560, 2560, 2579, 2578, - 2594, 2593, 2607, 2616, 2628, 2637, 2647, 2648, 2649, 2650, - 2651, 2655, 2658, 2667, 2668, 2672, 2675, 2678, 2693, 2702, - 2703, 2707, 2710, 2713, 2726, 2727, 2731, 2737, 2743, 2752, - 2755, 2762, 2765, 2771, 2772, 2773, 2777, 2778, 2782, 2789, - 2794, 2803, 2809, 2820, 2823, 2828, 2833, 2841, 2851, 2862, - 2865, 2865, 2885, 2886, 2890, 2891, 2892, 2896, 2903, 2903, - 2922, 2925, 2941, 2961, 2962, 2963, 2968, 2968, 2998, 3001, - 3008, 3018, 3018, 3022, 3023, 3024, 3028, 3038, 3058, 3081, - 3082, 3086, 3087, 3091, 3097, 3098, 3099, 3100, 3104, 3105, - 3106, 3110, 3113, 3124, 3129, 3124, 3149, 3156, 3161, 3170, - 3176, 3187, 3188, 3189, 3190, 3191, 3192, 3193, 3194, 3195, - 3196, 3197, 3198, 3199, 3200, 3201, 3202, 3203, 3204, 3205, - 3206, 3207, 3208, 3209, 3210, 3211, 3212, 3213, 3217, 3218, - 3219, 3220, 3221, 3222, 3223, 3224, 3228, 3239, 3243, 3250, - 3262, 3269, 3275, 3285, 3286, 3291, 3296, 3310, 3320, 3330, - 3340, 3350, 3363, 3364, 3365, 3366, 3367, 3371, 3375, 3375, - 3375, 3389, 3390, 3394, 3398, 3405, 3409, 3416, 3417, 3418, - 3419, 3420, 3435, 3441, 3441, 3441, 3445, 3450, 3457, 3457, - 3464, 3468, 3472, 3477, 3482, 3487, 3492, 3496, 3500, 3505, - 3509, 3513, 3518, 3518, 3518, 3524, 3531, 3531, 3531, 3536, - 3536, 3536, 3542, 3542, 3542, 3547, 3552, 3552, 3552, 3557, - 3557, 3557, 3566, 3571, 3571, 3571, 3576, 3576, 3576, 3585, - 3590, 3590, 3590, 3595, 3595, 3595, 3604, 3604, 3604, 3610, - 3610, 3610, 3619, 3622, 3633, 3649, 3649, 3654, 3663, 3649, - 3692, 3692, 3697, 3707, 3692, 3736, 3736, 3736, 3789, 3790, - 3791, 3792, 3793, 3797, 3804, 3811, 3817, 3823, 3830, 3837, - 3843, 3852, 3855, 3861, 3869, 3874, 3881, 3886, 3893, 3898, - 3904, 3905, 3909, 3910, 3915, 3916, 3920, 3921, 3925, 3926, - 3930, 3931, 3932, 3936, 3937, 3938, 3942, 3943, 3947, 3980, - 4019, 4038, 4058, 4078, 4099, 4099, 4099, 4107, 4107, 4107, - 4114, 4114, 4114, 4125, 4125, 4125, 4136, 4140, 4146, 4162, - 4168, 4174, 4180, 4180, 4180, 4194, 4199, 4206, 4226, 4254, - 4278, 4278, 4278, 4288, 4288, 4288, 4302, 4302, 4302, 4316, - 4325, 4325, 4325, 4345, 4352, 4352, 4352, 4362, 4367, 4374, - 4377, 4383, 4403, 4422, 4430, 4450, 4475, 4476, 4480, 4481, - 4486, 4496, 4499, 4502, 4505, 4513, 4522, 4534, 4544 + 2346, 2347, 2348, 2364, 2365, 2366, 2367, 2368, 2371, 2374, + 2375, 2375, 2375, 2378, 2383, 2387, 2391, 2391, 2391, 2396, + 2399, 2403, 2403, 2403, 2408, 2411, 2412, 2413, 2414, 2415, + 2416, 2417, 2418, 2419, 2421, 2425, 2433, 2438, 2442, 2451, + 2452, 2453, 2454, 2455, 2456, 2457, 2461, 2465, 2469, 2473, + 2477, 2481, 2485, 2489, 2493, 2500, 2501, 2510, 2514, 2515, + 2516, 2520, 2521, 2525, 2526, 2527, 2531, 2532, 2536, 2547, + 2548, 2549, 2550, 2555, 2558, 2558, 2562, 2562, 2581, 2580, + 2596, 2595, 2609, 2618, 2630, 2639, 2649, 2650, 2651, 2652, + 2653, 2657, 2660, 2669, 2670, 2674, 2677, 2680, 2695, 2704, + 2705, 2709, 2712, 2715, 2728, 2729, 2733, 2739, 2745, 2754, + 2757, 2764, 2767, 2773, 2774, 2775, 2779, 2780, 2784, 2791, + 2796, 2805, 2811, 2822, 2825, 2830, 2835, 2843, 2853, 2864, + 2867, 2867, 2887, 2888, 2892, 2893, 2894, 2898, 2905, 2905, + 2924, 2927, 2943, 2963, 2964, 2965, 2970, 2970, 3000, 3003, + 3010, 3020, 3020, 3024, 3025, 3026, 3030, 3040, 3060, 3083, + 3084, 3088, 3089, 3093, 3099, 3100, 3101, 3102, 3106, 3107, + 3108, 3112, 3115, 3126, 3131, 3126, 3151, 3158, 3163, 3172, + 3178, 3189, 3190, 3191, 3192, 3193, 3194, 3195, 3196, 3197, + 3198, 3199, 3200, 3201, 3202, 3203, 3204, 3205, 3206, 3207, + 3208, 3209, 3210, 3211, 3212, 3213, 3214, 3215, 3219, 3220, + 3221, 3222, 3223, 3224, 3225, 3226, 3230, 3241, 3245, 3252, + 3264, 3271, 3277, 3287, 3288, 3293, 3298, 3312, 3322, 3332, + 3342, 3352, 3365, 3366, 3367, 3368, 3369, 3373, 3377, 3377, + 3377, 3391, 3392, 3396, 3400, 3407, 3411, 3418, 3419, 3420, + 3421, 3422, 3437, 3443, 3443, 3443, 3447, 3452, 3459, 3459, + 3466, 3470, 3474, 3479, 3484, 3489, 3494, 3498, 3502, 3507, + 3511, 3515, 3520, 3520, 3520, 3526, 3533, 3533, 3533, 3538, + 3538, 3538, 3544, 3544, 3544, 3549, 3554, 3554, 3554, 3559, + 3559, 3559, 3568, 3573, 3573, 3573, 3578, 3578, 3578, 3587, + 3592, 3592, 3592, 3597, 3597, 3597, 3606, 3606, 3606, 3612, + 3612, 3612, 3621, 3624, 3635, 3651, 3651, 3656, 3665, 3651, + 3694, 3694, 3699, 3709, 3694, 3738, 3738, 3738, 3791, 3792, + 3793, 3794, 3795, 3799, 3806, 3813, 3819, 3825, 3832, 3839, + 3845, 3854, 3857, 3863, 3871, 3876, 3883, 3888, 3895, 3900, + 3906, 3907, 3911, 3912, 3917, 3918, 3922, 3923, 3927, 3928, + 3932, 3933, 3934, 3938, 3939, 3940, 3944, 3945, 3949, 3982, + 4021, 4040, 4060, 4080, 4101, 4101, 4101, 4109, 4109, 4109, + 4116, 4116, 4116, 4127, 4127, 4127, 4138, 4142, 4148, 4164, + 4170, 4176, 4182, 4182, 4182, 4196, 4201, 4208, 4228, 4256, + 4280, 4280, 4280, 4290, 4290, 4290, 4304, 4304, 4304, 4318, + 4327, 4327, 4327, 4347, 4354, 4354, 4354, 4364, 4369, 4376, + 4379, 4385, 4405, 4424, 4432, 4452, 4477, 4478, 4482, 4483, + 4488, 4498, 4501, 4504, 4507, 4515, 4524, 4536, 4546 }; #endif @@ -6483,10 +6483,10 @@ YYLTYPE yylloc = yyloc_default; switch (yyn) { case 3: /* program: program module_declaration */ - { - if ( yyextra->das_has_type_declarations ) { - das_yyerror(scanner,"module name has to be first declaration",tokAt(scanner,(yylsp[0])), CompilationError::syntax_error); - } + { + if ( yyextra->das_has_type_declarations ) { + das_yyerror(scanner,"module name has to be first declaration",tokAt(scanner,(yylsp[0])), CompilationError::syntax_error); + } } break; @@ -6523,8 +6523,8 @@ YYLTYPE yylloc = yyloc_default; break; case 17: /* semicolon: SEMICOLON */ - { - format::try_semicolon_at_eol(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); + { + format::try_semicolon_at_eol(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); } break; @@ -6533,8 +6533,8 @@ YYLTYPE yylloc = yyloc_default; break; case 19: /* top_level_reader_macro: expr_reader semicolon */ - { - delete (yyvsp[-1].pExpression); // we do nothing, we don't even attemp to 'visit' + { + delete (yyvsp[-1].pExpression); // we do nothing, we don't even attemp to 'visit' } break; @@ -6567,21 +6567,21 @@ YYLTYPE yylloc = yyloc_default; break; case 27: /* module_declaration: "module" module_name optional_shared optional_public_or_private_module optional_not_required */ - { - yyextra->g_Program->thisModuleName = *(yyvsp[-3].s); - yyextra->g_Program->thisModule->isPublic = (yyvsp[-1].b); - yyextra->g_Program->thisModule->isModule = true; - yyextra->g_Program->thisModule->visibleEverywhere = (yyvsp[0].b); - if ( yyextra->g_Program->thisModule->name.empty() ) { - yyextra->g_Program->library.renameModule(yyextra->g_Program->thisModule.get(),*(yyvsp[-3].s)); - } else if ( yyextra->g_Program->thisModule->name != *(yyvsp[-3].s) ){ - das_yyerror(scanner,"this module already has a name " + yyextra->g_Program->thisModule->name,tokAt(scanner,(yylsp[-3])), - CompilationError::module_already_has_a_name); - } - if ( !yyextra->g_Program->policies.ignore_shared_modules ) { - yyextra->g_Program->promoteToBuiltin = (yyvsp[-2].b); - } - delete (yyvsp[-3].s); + { + yyextra->g_Program->thisModuleName = *(yyvsp[-3].s); + yyextra->g_Program->thisModule->isPublic = (yyvsp[-1].b); + yyextra->g_Program->thisModule->isModule = true; + yyextra->g_Program->thisModule->visibleEverywhere = (yyvsp[0].b); + if ( yyextra->g_Program->thisModule->name.empty() ) { + yyextra->g_Program->library.renameModule(yyextra->g_Program->thisModule.get(),*(yyvsp[-3].s)); + } else if ( yyextra->g_Program->thisModule->name != *(yyvsp[-3].s) ){ + das_yyerror(scanner,"this module already has a name " + yyextra->g_Program->thisModule->name,tokAt(scanner,(yylsp[-3])), + CompilationError::module_already_has_a_name); + } + if ( !yyextra->g_Program->policies.ignore_shared_modules ) { + yyextra->g_Program->promoteToBuiltin = (yyvsp[-2].b); + } + delete (yyvsp[-3].s); } break; @@ -6630,141 +6630,141 @@ YYLTYPE yylloc = yyloc_default; break; case 39: /* string_builder_body: %empty */ - { - (yyval.pExpression) = new ExprStringBuilder(); - (yyval.pExpression)->at = LineInfo(yyextra->g_FileAccessStack.back(), - yylloc.first_column,yylloc.first_line,yylloc.last_column,yylloc.last_line); + { + (yyval.pExpression) = new ExprStringBuilder(); + (yyval.pExpression)->at = LineInfo(yyextra->g_FileAccessStack.back(), + yylloc.first_column,yylloc.first_line,yylloc.last_column,yylloc.last_line); } break; case 40: /* string_builder_body: string_builder_body character_sequence */ - { - bool err; - auto esconst = unescapeString(*(yyvsp[0].s),&err); - if ( err ) das_yyerror(scanner,"invalid escape sequence",tokAt(scanner,(yylsp[-1])), CompilationError::invalid_escape_sequence); - auto sc = new ExprConstString(tokAt(scanner,(yylsp[0])),esconst); - delete (yyvsp[0].s); - static_cast((yyvsp[-1].pExpression))->elements.push_back(sc); - (yyval.pExpression) = (yyvsp[-1].pExpression); + { + bool err; + auto esconst = unescapeString(*(yyvsp[0].s),&err); + if ( err ) das_yyerror(scanner,"invalid escape sequence",tokAt(scanner,(yylsp[-1])), CompilationError::invalid_escape_sequence); + auto sc = new ExprConstString(tokAt(scanner,(yylsp[0])),esconst); + delete (yyvsp[0].s); + static_cast((yyvsp[-1].pExpression))->elements.push_back(sc); + (yyval.pExpression) = (yyvsp[-1].pExpression); } break; case 41: /* string_builder_body: string_builder_body "{" expr optional_format_string "}" */ - { - auto se = (yyvsp[-2].pExpression); - if ( !(yyvsp[-1].s)->empty() ) { - auto call_fmt = new ExprCall(tokAt(scanner,(yylsp[-1])), "_::fmt"); - call_fmt->arguments.push_back(new ExprConstString(tokAt(scanner,(yylsp[-1])),":" + *(yyvsp[-1].s))); - call_fmt->arguments.push_back(se); - se = call_fmt; - } - static_cast((yyvsp[-4].pExpression))->elements.push_back(se); - (yyval.pExpression) = (yyvsp[-4].pExpression); - delete (yyvsp[-1].s); + { + auto se = (yyvsp[-2].pExpression); + if ( !(yyvsp[-1].s)->empty() ) { + auto call_fmt = new ExprCall(tokAt(scanner,(yylsp[-1])), "_::fmt"); + call_fmt->arguments.push_back(new ExprConstString(tokAt(scanner,(yylsp[-1])),":" + *(yyvsp[-1].s))); + call_fmt->arguments.push_back(se); + se = call_fmt; + } + static_cast((yyvsp[-4].pExpression))->elements.push_back(se); + (yyval.pExpression) = (yyvsp[-4].pExpression); + delete (yyvsp[-1].s); } break; case 42: /* string_builder: "start of the string" string_builder_body "end of the string" */ - { - auto strb = static_cast((yyvsp[-1].pExpression)); - if ( strb->elements.size()==0 ) { - (yyval.pExpression) = new ExprConstString(tokRangeAt(scanner,(yylsp[-2]),(yylsp[0])),""); - delete (yyvsp[-1].pExpression); - } else if ( strb->elements.size()==1 && strb->elements[0]->rtti_isStringConstant() ) { - auto sconst = static_cast(strb->elements[0]); - (yyval.pExpression) = new ExprConstString(tokRangeAt(scanner,(yylsp[-2]),(yylsp[0])),sconst->text); - delete (yyvsp[-1].pExpression); - } else { - (yyval.pExpression) = (yyvsp[-1].pExpression); - } + { + auto strb = static_cast((yyvsp[-1].pExpression)); + if ( strb->elements.size()==0 ) { + (yyval.pExpression) = new ExprConstString(tokRangeAt(scanner,(yylsp[-2]),(yylsp[0])),""); + delete (yyvsp[-1].pExpression); + } else if ( strb->elements.size()==1 && strb->elements[0]->rtti_isStringConstant() ) { + auto sconst = static_cast(strb->elements[0]); + (yyval.pExpression) = new ExprConstString(tokRangeAt(scanner,(yylsp[-2]),(yylsp[0])),sconst->text); + delete (yyvsp[-1].pExpression); + } else { + (yyval.pExpression) = (yyvsp[-1].pExpression); + } } break; case 43: /* reader_character_sequence: STRING_CHARACTER */ - { - if ( !yyextra->g_ReaderMacro->accept(yyextra->g_Program.get(), yyextra->g_Program->thisModule.get(), yyextra->g_ReaderExpr, (yyvsp[0].ch), tokAt(scanner,(yylsp[0]))) ) { - das_yyend_reader(scanner); - } + { + if ( !yyextra->g_ReaderMacro->accept(yyextra->g_Program.get(), yyextra->g_Program->thisModule.get(), yyextra->g_ReaderExpr, (yyvsp[0].ch), tokAt(scanner,(yylsp[0]))) ) { + das_yyend_reader(scanner); + } } break; case 44: /* reader_character_sequence: reader_character_sequence STRING_CHARACTER */ - { - if ( !yyextra->g_ReaderMacro->accept(yyextra->g_Program.get(), yyextra->g_Program->thisModule.get(), yyextra->g_ReaderExpr, (yyvsp[0].ch), tokAt(scanner,(yylsp[0]))) ) { - das_yyend_reader(scanner); - } + { + if ( !yyextra->g_ReaderMacro->accept(yyextra->g_Program.get(), yyextra->g_Program->thisModule.get(), yyextra->g_ReaderExpr, (yyvsp[0].ch), tokAt(scanner,(yylsp[0]))) ) { + das_yyend_reader(scanner); + } } break; case 45: /* $@2: %empty */ - { - auto macros = yyextra->g_Program->getReaderMacro(*(yyvsp[0].s)); - if ( macros.size()==0 ) { - das_yyerror(scanner,"reader macro " + *(yyvsp[0].s) + " not found",tokAt(scanner,(yylsp[0])), - CompilationError::unsupported_read_macro); - } else if ( macros.size()>1 ) { - string options; - for ( auto & x : macros ) { - options += "\t" + x->module->name + "::" + x->name + "\n"; - } - das_yyerror(scanner,"too many options for the reader macro " + *(yyvsp[0].s) + "\n" + options, tokAt(scanner,(yylsp[0])), - CompilationError::unsupported_read_macro); - } else if ( yychar != '~' ) { - das_yyerror(scanner,"expecting ~ after the reader macro", tokAt(scanner,(yylsp[0])), - CompilationError::syntax_error); - } else { - yyextra->g_ReaderMacro = macros.back(); - yyextra->g_ReaderExpr = new ExprReader(tokAt(scanner,(yylsp[-1])),yyextra->g_ReaderMacro); - yyclearin ; - das_yybegin_reader(scanner); - } + { + auto macros = yyextra->g_Program->getReaderMacro(*(yyvsp[0].s)); + if ( macros.size()==0 ) { + das_yyerror(scanner,"reader macro " + *(yyvsp[0].s) + " not found",tokAt(scanner,(yylsp[0])), + CompilationError::unsupported_read_macro); + } else if ( macros.size()>1 ) { + string options; + for ( auto & x : macros ) { + options += "\t" + x->module->name + "::" + x->name + "\n"; + } + das_yyerror(scanner,"too many options for the reader macro " + *(yyvsp[0].s) + "\n" + options, tokAt(scanner,(yylsp[0])), + CompilationError::unsupported_read_macro); + } else if ( yychar != '~' ) { + das_yyerror(scanner,"expecting ~ after the reader macro", tokAt(scanner,(yylsp[0])), + CompilationError::syntax_error); + } else { + yyextra->g_ReaderMacro = macros.back(); + yyextra->g_ReaderExpr = new ExprReader(tokAt(scanner,(yylsp[-1])),yyextra->g_ReaderMacro); + yyclearin ; + das_yybegin_reader(scanner); + } } break; case 46: /* expr_reader: '%' name_in_namespace $@2 reader_character_sequence */ - { - yyextra->g_ReaderExpr->at = tokRangeAt(scanner,(yylsp[-3]),(yylsp[0])); - (yyval.pExpression) = yyextra->g_ReaderExpr; - int thisLine = 0; - FileInfo * info = nullptr; - if (!format::is_formatter_enabled()) { - if ( auto seqt = yyextra->g_ReaderMacro->suffix(yyextra->g_Program.get(), yyextra->g_Program->thisModule.get(), yyextra->g_ReaderExpr, thisLine, info, tokAt(scanner,(yylsp[0]))) ) { - das_accept_sequence(scanner,seqt,strlen(seqt),thisLine,info); - yylloc.first_column = (yylsp[0]).first_column; - yylloc.first_line = (yylsp[0]).first_line; - yylloc.last_column = (yylsp[0]).last_column; - yylloc.last_line = (yylsp[0]).last_line; - } - } - delete (yyvsp[-2].s); - yyextra->g_ReaderMacro = nullptr; - yyextra->g_ReaderExpr = nullptr; + { + yyextra->g_ReaderExpr->at = tokRangeAt(scanner,(yylsp[-3]),(yylsp[0])); + (yyval.pExpression) = yyextra->g_ReaderExpr; + int thisLine = 0; + FileInfo * info = nullptr; + if (!format::is_formatter_enabled()) { + if ( auto seqt = yyextra->g_ReaderMacro->suffix(yyextra->g_Program.get(), yyextra->g_Program->thisModule.get(), yyextra->g_ReaderExpr, thisLine, info, tokAt(scanner,(yylsp[0]))) ) { + das_accept_sequence(scanner,seqt,strlen(seqt),thisLine,info); + yylloc.first_column = (yylsp[0]).first_column; + yylloc.first_line = (yylsp[0]).first_line; + yylloc.last_column = (yylsp[0]).last_column; + yylloc.last_line = (yylsp[0]).last_line; + } + } + delete (yyvsp[-2].s); + yyextra->g_ReaderMacro = nullptr; + yyextra->g_ReaderExpr = nullptr; } break; case 47: /* options_declaration: "options" annotation_argument_list */ - { - for ( auto & opt : *(yyvsp[0].aaList) ) { - if ( opt.name=="indenting" && opt.type==Type::tInt ) { - if (opt.iValue != 0 && opt.iValue != 2 && opt.iValue != 4 && opt.iValue != 8) { //this is error - yyextra->das_tab_size = yyextra->das_def_tab_size; - } else { - yyextra->das_tab_size = opt.iValue ? opt.iValue : yyextra->das_def_tab_size;//0 is default - } - yyextra->g_FileAccessStack.back()->tabSize = yyextra->das_tab_size; - } else if ( opt.name=="gen2_make_syntax" && opt.type==Type::tBool ) { - yyextra->das_gen2_make_syntax = opt.bValue; - } - } - for ( auto & opt : *(yyvsp[0].aaList) ) { - if ( yyextra->g_Access->isOptionAllowed(opt.name, yyextra->g_Program->thisModule->fileName) ) { - yyextra->g_Program->options.push_back(opt); - } else { - das_yyerror(scanner,"option " + opt.name + " is not allowed here", - tokAt(scanner,(yylsp[0])), CompilationError::invalid_option); - } - } - delete (yyvsp[0].aaList); + { + for ( auto & opt : *(yyvsp[0].aaList) ) { + if ( opt.name=="indenting" && opt.type==Type::tInt ) { + if (opt.iValue != 0 && opt.iValue != 2 && opt.iValue != 4 && opt.iValue != 8) { //this is error + yyextra->das_tab_size = yyextra->das_def_tab_size; + } else { + yyextra->das_tab_size = opt.iValue ? opt.iValue : yyextra->das_def_tab_size;//0 is default + } + yyextra->g_FileAccessStack.back()->tabSize = yyextra->das_tab_size; + } else if ( opt.name=="gen2_make_syntax" && opt.type==Type::tBool ) { + yyextra->das_gen2_make_syntax = opt.bValue; + } + } + for ( auto & opt : *(yyvsp[0].aaList) ) { + if ( yyextra->g_Access->isOptionAllowed(opt.name, yyextra->g_Program->thisModule->fileName) ) { + yyextra->g_Program->options.push_back(opt); + } else { + das_yyerror(scanner,"option " + opt.name + " is not allowed here", + tokAt(scanner,(yylsp[0])), CompilationError::invalid_option); + } + } + delete (yyvsp[0].aaList); } break; @@ -6781,66 +6781,66 @@ YYLTYPE yylloc = yyloc_default; break; case 52: /* require_module_name: keyword_or_name */ - { - (yyval.s) = (yyvsp[0].s); + { + (yyval.s) = (yyvsp[0].s); } break; case 53: /* require_module_name: '%' require_module_name */ - { - *(yyvsp[0].s) = "%" + *(yyvsp[0].s); - (yyval.s) = (yyvsp[0].s); + { + *(yyvsp[0].s) = "%" + *(yyvsp[0].s); + (yyval.s) = (yyvsp[0].s); } break; case 54: /* require_module_name: '.' '/' require_module_name */ - { - *(yyvsp[0].s) = "./" + *(yyvsp[0].s); - (yyval.s) = (yyvsp[0].s); + { + *(yyvsp[0].s) = "./" + *(yyvsp[0].s); + (yyval.s) = (yyvsp[0].s); } break; case 55: /* require_module_name: ".." '/' require_module_name */ - { - *(yyvsp[0].s) = "../" + *(yyvsp[0].s); - (yyval.s) = (yyvsp[0].s); + { + *(yyvsp[0].s) = "../" + *(yyvsp[0].s); + (yyval.s) = (yyvsp[0].s); } break; case 56: /* require_module_name: '%' '/' require_module_name */ - { - *(yyvsp[0].s) = "%/" + *(yyvsp[0].s); - (yyval.s) = (yyvsp[0].s); + { + *(yyvsp[0].s) = "%/" + *(yyvsp[0].s); + (yyval.s) = (yyvsp[0].s); } break; case 57: /* require_module_name: require_module_name '.' keyword_or_name */ - { - *(yyvsp[-2].s) += "."; - *(yyvsp[-2].s) += *(yyvsp[0].s); - delete (yyvsp[0].s); - (yyval.s) = (yyvsp[-2].s); + { + *(yyvsp[-2].s) += "."; + *(yyvsp[-2].s) += *(yyvsp[0].s); + delete (yyvsp[0].s); + (yyval.s) = (yyvsp[-2].s); } break; case 58: /* require_module_name: require_module_name '/' keyword_or_name */ - { - *(yyvsp[-2].s) += "/"; - *(yyvsp[-2].s) += *(yyvsp[0].s); - delete (yyvsp[0].s); - (yyval.s) = (yyvsp[-2].s); + { + *(yyvsp[-2].s) += "/"; + *(yyvsp[-2].s) += *(yyvsp[0].s); + delete (yyvsp[0].s); + (yyval.s) = (yyvsp[-2].s); } break; case 59: /* require_module: require_module_name is_public_module */ - { - ast_requireModule(scanner,(yyvsp[-1].s),nullptr,(yyvsp[0].b),tokAt(scanner,(yylsp[-1]))); + { + ast_requireModule(scanner,(yyvsp[-1].s),nullptr,(yyvsp[0].b),tokAt(scanner,(yylsp[-1]))); } break; case 60: /* require_module: require_module_name "as" "name" is_public_module */ - { - ast_requireModule(scanner,(yyvsp[-3].s),(yyvsp[-1].s),(yyvsp[0].b),tokAt(scanner,(yylsp[-3]))); + { + ast_requireModule(scanner,(yyvsp[-3].s),(yyvsp[-1].s),(yyvsp[0].b),tokAt(scanner,(yylsp[-3]))); } break; @@ -6853,32 +6853,32 @@ YYLTYPE yylloc = yyloc_default; break; case 66: /* expect_error: "integer constant" */ - { - yyextra->g_Program->expectErrors[CompilationError((yyvsp[0].i))] ++; + { + yyextra->g_Program->expectErrors[CompilationError((yyvsp[0].i))] ++; } break; case 67: /* expect_error: "integer constant" ':' "integer constant" */ - { - yyextra->g_Program->expectErrors[CompilationError((yyvsp[-2].i))] += (yyvsp[0].i); + { + yyextra->g_Program->expectErrors[CompilationError((yyvsp[-2].i))] += (yyvsp[0].i); } break; case 68: /* expression_label: "label" "integer constant" ':' */ - { - (yyval.pExpression) = new ExprLabel(tokAt(scanner,(yylsp[-2])),(yyvsp[-1].i)); + { + (yyval.pExpression) = new ExprLabel(tokAt(scanner,(yylsp[-2])),(yyvsp[-1].i)); } break; case 69: /* expression_goto: "goto" "label" "integer constant" */ - { - (yyval.pExpression) = new ExprGoto(tokAt(scanner,(yylsp[-2])),(yyvsp[0].i)); + { + (yyval.pExpression) = new ExprGoto(tokAt(scanner,(yylsp[-2])),(yyvsp[0].i)); } break; case 70: /* expression_goto: "goto" expr */ - { - (yyval.pExpression) = new ExprGoto(tokAt(scanner,(yylsp[-1])),(yyvsp[0].pExpression)); + { + (yyval.pExpression) = new ExprGoto(tokAt(scanner,(yylsp[-1])),(yyvsp[0].pExpression)); } break; @@ -6899,28 +6899,28 @@ YYLTYPE yylloc = yyloc_default; break; case 75: /* expression_else: elif_or_static_elif expr expression_block expression_else */ - { - format::wrap_par_expr(tokAt(scanner,(yylsp[-2])), (yyvsp[-2].pExpression)->at); - if (!format::is_else_newline() && (yyvsp[0].pExpression) != nullptr) { - format::skip_spaces_or_print(tokAt(scanner,(yylsp[-3])), tokAt(scanner,(yylsp[-1])), tokAt(scanner,(yylsp[0])), yyextra->das_tab_size); - } - - auto eite = new ExprIfThenElse(tokAt(scanner,(yylsp[-3])),(yyvsp[-2].pExpression),(yyvsp[-1].pExpression),(yyvsp[0].pExpression)); - eite->isStatic = (yyvsp[-3].b); - (yyval.pExpression) = eite; + { + format::wrap_par_expr(tokAt(scanner,(yylsp[-2])), (yyvsp[-2].pExpression)->at); + if (!format::is_else_newline() && (yyvsp[0].pExpression) != nullptr) { + format::skip_spaces_or_print(tokAt(scanner,(yylsp[-3])), tokAt(scanner,(yylsp[-1])), tokAt(scanner,(yylsp[0])), yyextra->das_tab_size); + } + + auto eite = new ExprIfThenElse(tokAt(scanner,(yylsp[-3])),(yyvsp[-2].pExpression),(yyvsp[-1].pExpression),(yyvsp[0].pExpression)); + eite->isStatic = (yyvsp[-3].b); + (yyval.pExpression) = eite; } break; case 76: /* expression_else: elif_or_static_elif expr expression_block SEMICOLON expression_else */ - { - format::wrap_par_expr(tokAt(scanner,(yylsp[-3])), (yyvsp[-3].pExpression)->at); - if (!format::is_else_newline() && (yyvsp[0].pExpression) != nullptr) { - format::skip_spaces_or_print(tokAt(scanner,(yylsp[-4])), tokAt(scanner,(yylsp[-2])), tokAt(scanner,(yylsp[0])), yyextra->das_tab_size); - } - - auto eite = new ExprIfThenElse(tokAt(scanner,(yylsp[-4])),(yyvsp[-3].pExpression),(yyvsp[-2].pExpression),(yyvsp[0].pExpression)); - eite->isStatic = (yyvsp[-4].b); - (yyval.pExpression) = eite; + { + format::wrap_par_expr(tokAt(scanner,(yylsp[-3])), (yyvsp[-3].pExpression)->at); + if (!format::is_else_newline() && (yyvsp[0].pExpression) != nullptr) { + format::skip_spaces_or_print(tokAt(scanner,(yylsp[-4])), tokAt(scanner,(yylsp[-2])), tokAt(scanner,(yylsp[0])), yyextra->das_tab_size); + } + + auto eite = new ExprIfThenElse(tokAt(scanner,(yylsp[-4])),(yyvsp[-3].pExpression),(yyvsp[-2].pExpression),(yyvsp[0].pExpression)); + eite->isStatic = (yyvsp[-4].b); + (yyval.pExpression) = eite; } break; @@ -6941,8 +6941,8 @@ YYLTYPE yylloc = yyloc_default; break; case 81: /* expression_else_one_liner: "else" $@3 expression_if_one_liner */ - { - (yyval.pExpression) = (yyvsp[0].pExpression); + { + (yyval.pExpression) = (yyvsp[0].pExpression); } break; @@ -6967,28 +6967,28 @@ YYLTYPE yylloc = yyloc_default; break; case 87: /* expression_if_then_else: if_or_static_if expr expression_block SEMICOLON expression_else */ - { - format::wrap_par_expr(tokAt(scanner,(yylsp[-3])), (yyvsp[-3].pExpression)->at); - if (!format::is_else_newline() && (yyvsp[0].pExpression) != nullptr) { - format::skip_spaces_or_print(tokAt(scanner,(yylsp[-4])), tokAt(scanner,(yylsp[-2])), tokAt(scanner,(yylsp[0])), yyextra->das_tab_size); - } - - auto eite = new ExprIfThenElse(tokAt(scanner,(yylsp[-4])),(yyvsp[-3].pExpression),(yyvsp[-2].pExpression),(yyvsp[0].pExpression)); - eite->isStatic = (yyvsp[-4].b); - (yyval.pExpression) = eite; + { + format::wrap_par_expr(tokAt(scanner,(yylsp[-3])), (yyvsp[-3].pExpression)->at); + if (!format::is_else_newline() && (yyvsp[0].pExpression) != nullptr) { + format::skip_spaces_or_print(tokAt(scanner,(yylsp[-4])), tokAt(scanner,(yylsp[-2])), tokAt(scanner,(yylsp[0])), yyextra->das_tab_size); + } + + auto eite = new ExprIfThenElse(tokAt(scanner,(yylsp[-4])),(yyvsp[-3].pExpression),(yyvsp[-2].pExpression),(yyvsp[0].pExpression)); + eite->isStatic = (yyvsp[-4].b); + (yyval.pExpression) = eite; } break; case 88: /* expression_if_then_else: if_or_static_if expr expression_block expression_else */ - { - format::wrap_par_expr(tokAt(scanner,(yylsp[-2])), (yyvsp[-2].pExpression)->at); - if (!format::is_else_newline() && (yyvsp[0].pExpression) != nullptr) { - format::skip_spaces_or_print(tokAt(scanner,(yylsp[-3])), tokAt(scanner,(yylsp[-1])), tokAt(scanner,(yylsp[0])), yyextra->das_tab_size); - } - - auto eite = new ExprIfThenElse(tokAt(scanner,(yylsp[-3])),(yyvsp[-2].pExpression),(yyvsp[-1].pExpression),(yyvsp[0].pExpression)); - eite->isStatic = (yyvsp[-3].b); - (yyval.pExpression) = eite; + { + format::wrap_par_expr(tokAt(scanner,(yylsp[-2])), (yyvsp[-2].pExpression)->at); + if (!format::is_else_newline() && (yyvsp[0].pExpression) != nullptr) { + format::skip_spaces_or_print(tokAt(scanner,(yylsp[-3])), tokAt(scanner,(yylsp[-1])), tokAt(scanner,(yylsp[0])), yyextra->das_tab_size); + } + + auto eite = new ExprIfThenElse(tokAt(scanner,(yylsp[-3])),(yyvsp[-2].pExpression),(yyvsp[-1].pExpression),(yyvsp[0].pExpression)); + eite->isStatic = (yyvsp[-3].b); + (yyval.pExpression) = eite; } break; @@ -6997,10 +6997,10 @@ YYLTYPE yylloc = yyloc_default; break; case 90: /* expression_if_then_else: expression_if_one_liner "if" $@4 expr expression_else_one_liner semicolon */ - { - format::wrap_par_expr(tokAt(scanner,(yylsp[-2])), (yyvsp[-2].pExpression)->at); - - (yyval.pExpression) = new ExprIfThenElse(tokAt(scanner,(yylsp[-4])),(yyvsp[-2].pExpression),ast_wrapInBlock((yyvsp[-5].pExpression)),(yyvsp[-1].pExpression) ? ast_wrapInBlock((yyvsp[-1].pExpression)) : nullptr); + { + format::wrap_par_expr(tokAt(scanner,(yylsp[-2])), (yyvsp[-2].pExpression)->at); + + (yyval.pExpression) = new ExprIfThenElse(tokAt(scanner,(yylsp[-4])),(yyvsp[-2].pExpression),ast_wrapInBlock((yyvsp[-5].pExpression)),(yyvsp[-1].pExpression) ? ast_wrapInBlock((yyvsp[-1].pExpression)) : nullptr); } break; @@ -7009,52 +7009,52 @@ YYLTYPE yylloc = yyloc_default; break; case 92: /* expression_for_loop: "for" $@5 variable_name_with_pos_list "in" expr_list expression_block */ - { - format::wrap_par_expr(tokRangeAt(scanner, (yylsp[-3]), (yylsp[-1])), tokRangeAt(scanner, (yylsp[-3]), (yylsp[-1]))); - (yyval.pExpression) = ast_forLoop(scanner,(yyvsp[-3].pNameWithPosList),(yyvsp[-1].pExpression),(yyvsp[0].pExpression),tokAt(scanner,(yylsp[-5])),tokAt(scanner,(yylsp[0]))); + { + format::wrap_par_expr(tokRangeAt(scanner, (yylsp[-3]), (yylsp[-1])), tokRangeAt(scanner, (yylsp[-3]), (yylsp[-1]))); + (yyval.pExpression) = ast_forLoop(scanner,(yyvsp[-3].pNameWithPosList),(yyvsp[-1].pExpression),(yyvsp[0].pExpression),tokAt(scanner,(yylsp[-5])),tokAt(scanner,(yylsp[0]))); } break; case 93: /* $@6: %empty */ - { // Had to add to successfully convert to v2 syntax, just copied from ds2_parser - yyextra->das_keyword = true; + { // Had to add to successfully convert to v2 syntax, just copied from ds2_parser + yyextra->das_keyword = true; } break; case 94: /* expression_for_loop: "for" $@6 '(' variable_name_with_pos_list "in" expr_list ')' expression_block */ - { - yyextra->das_keyword = false; - (yyval.pExpression) = ast_forLoop(scanner,(yyvsp[-4].pNameWithPosList),(yyvsp[-2].pExpression),(yyvsp[0].pExpression),tokAt(scanner,(yylsp[-7])),tokAt(scanner,(yylsp[0]))); + { + yyextra->das_keyword = false; + (yyval.pExpression) = ast_forLoop(scanner,(yyvsp[-4].pNameWithPosList),(yyvsp[-2].pExpression),(yyvsp[0].pExpression),tokAt(scanner,(yylsp[-7])),tokAt(scanner,(yylsp[0]))); } break; case 95: /* expression_unsafe: "unsafe" expression_block */ - { - auto pUnsafe = new ExprUnsafe(tokAt(scanner,(yylsp[-1]))); - pUnsafe->body = (yyvsp[0].pExpression); - (yyval.pExpression) = pUnsafe; + { + auto pUnsafe = new ExprUnsafe(tokAt(scanner,(yylsp[-1]))); + pUnsafe->body = (yyvsp[0].pExpression); + (yyval.pExpression) = pUnsafe; } break; case 96: /* expression_while_loop: "while" expr expression_block */ - { - format::wrap_par_expr(tokAt(scanner,(yylsp[-1])), (yyvsp[-1].pExpression)->at); - - auto pWhile = new ExprWhile(tokAt(scanner,(yylsp[-2]))); - pWhile->cond = (yyvsp[-1].pExpression); - pWhile->body = (yyvsp[0].pExpression); - ((ExprBlock *)(yyvsp[0].pExpression))->inTheLoop = true; - (yyval.pExpression) = pWhile; + { + format::wrap_par_expr(tokAt(scanner,(yylsp[-1])), (yyvsp[-1].pExpression)->at); + + auto pWhile = new ExprWhile(tokAt(scanner,(yylsp[-2]))); + pWhile->cond = (yyvsp[-1].pExpression); + pWhile->body = (yyvsp[0].pExpression); + ((ExprBlock *)(yyvsp[0].pExpression))->inTheLoop = true; + (yyval.pExpression) = pWhile; } break; case 97: /* expression_with: "with" expr expression_block */ - { - format::wrap_par_expr(tokAt(scanner,(yylsp[-1])), (yyvsp[-1].pExpression)->at); - auto pWith = new ExprWith(tokAt(scanner,(yylsp[-2]))); - pWith->with = (yyvsp[-1].pExpression); - pWith->body = (yyvsp[0].pExpression); - (yyval.pExpression) = pWith; + { + format::wrap_par_expr(tokAt(scanner,(yylsp[-1])), (yyvsp[-1].pExpression)->at); + auto pWith = new ExprWith(tokAt(scanner,(yylsp[-2]))); + pWith->with = (yyvsp[-1].pExpression); + pWith->body = (yyvsp[0].pExpression); + (yyval.pExpression) = pWith; } break; @@ -7063,9 +7063,9 @@ YYLTYPE yylloc = yyloc_default; break; case 99: /* expression_with_alias: "assume" "name" '=' $@7 expr semicolon */ - { - (yyval.pExpression) = new ExprAssume(tokAt(scanner,(yylsp[-5])), *(yyvsp[-4].s), ExpressionPtr((yyvsp[-1].pExpression))); - delete (yyvsp[-4].s); + { + (yyval.pExpression) = new ExprAssume(tokAt(scanner,(yylsp[-5])), *(yyvsp[-4].s), ExpressionPtr((yyvsp[-1].pExpression))); + delete (yyvsp[-4].s); } break; @@ -7074,8 +7074,8 @@ YYLTYPE yylloc = yyloc_default; break; case 101: /* expression_with_alias: "typedef" $@8 "name" '=' type_declaration semicolon */ - { - (yyval.pExpression) = new ExprAssume(tokAt(scanner,(yylsp[-5])), *(yyvsp[-3].s), TypeDeclPtr((yyvsp[-1].pTypeDecl))); + { + (yyval.pExpression) = new ExprAssume(tokAt(scanner,(yylsp[-5])), *(yyvsp[-3].s), TypeDeclPtr((yyvsp[-1].pTypeDecl))); } break; @@ -7104,18 +7104,18 @@ YYLTYPE yylloc = yyloc_default; break; case 108: /* annotation_argument_value_list: annotation_argument_value */ - { - (yyval.aaList) = new AnnotationArgumentList(); - (yyval.aaList)->push_back(*(yyvsp[0].aa)); - delete (yyvsp[0].aa); + { + (yyval.aaList) = new AnnotationArgumentList(); + (yyval.aaList)->push_back(*(yyvsp[0].aa)); + delete (yyvsp[0].aa); } break; case 109: /* annotation_argument_value_list: annotation_argument_value_list ',' annotation_argument_value */ - { - (yyval.aaList) = (yyvsp[-2].aaList); - (yyval.aaList)->push_back(*(yyvsp[0].aa)); - delete (yyvsp[0].aa); + { + (yyval.aaList) = (yyvsp[-2].aaList); + (yyval.aaList)->push_back(*(yyvsp[0].aa)); + delete (yyvsp[0].aa); } break; @@ -7164,38 +7164,38 @@ YYLTYPE yylloc = yyloc_default; break; case 121: /* annotation_argument: annotation_argument_name '=' '(' annotation_argument_value_list ')' */ - { - { (yyval.aa) = new AnnotationArgument(*(yyvsp[-4].s),(yyvsp[-1].aaList),tokRangeAt(scanner,(yylsp[-4]),(yylsp[0]))); delete (yyvsp[-4].s); } + { + { (yyval.aa) = new AnnotationArgument(*(yyvsp[-4].s),(yyvsp[-1].aaList),tokRangeAt(scanner,(yylsp[-4]),(yylsp[0]))); delete (yyvsp[-4].s); } } break; case 122: /* annotation_argument_list: annotation_argument */ - { - (yyval.aaList) = ast_annotationArgumentListEntry(scanner,new AnnotationArgumentList(),(yyvsp[0].aa)); + { + (yyval.aaList) = ast_annotationArgumentListEntry(scanner,new AnnotationArgumentList(),(yyvsp[0].aa)); } break; case 123: /* annotation_argument_list: annotation_argument_list ',' annotation_argument */ - { - (yyval.aaList) = ast_annotationArgumentListEntry(scanner,(yyvsp[-2].aaList),(yyvsp[0].aa)); + { + (yyval.aaList) = ast_annotationArgumentListEntry(scanner,(yyvsp[-2].aaList),(yyvsp[0].aa)); } break; case 124: /* metadata_argument_list: '@' annotation_argument */ - { - (yyval.aaList) = ast_annotationArgumentListEntry(scanner,new AnnotationArgumentList(),(yyvsp[0].aa)); + { + (yyval.aaList) = ast_annotationArgumentListEntry(scanner,new AnnotationArgumentList(),(yyvsp[0].aa)); } break; case 125: /* metadata_argument_list: metadata_argument_list '@' annotation_argument */ - { - (yyval.aaList) = ast_annotationArgumentListEntry(scanner,(yyvsp[-2].aaList),(yyvsp[0].aa)); + { + (yyval.aaList) = ast_annotationArgumentListEntry(scanner,(yyvsp[-2].aaList),(yyvsp[0].aa)); } break; case 126: /* metadata_argument_list: metadata_argument_list semicolon */ - { - (yyval.aaList) = (yyvsp[-1].aaList); + { + (yyval.aaList) = (yyvsp[-1].aaList); } break; @@ -7216,122 +7216,122 @@ YYLTYPE yylloc = yyloc_default; break; case 131: /* annotation_declaration_basic: annotation_declaration_name */ - { - (yyval.fa) = new AnnotationDeclaration(); - (yyval.fa)->at = tokAt(scanner,(yylsp[0])); - if ( yyextra->g_Access->isAnnotationAllowed(*(yyvsp[0].s), yyextra->g_Program->thisModuleName) ) { - if ( auto ann = findAnnotation(scanner,*(yyvsp[0].s),tokAt(scanner,(yylsp[0]))) ) { - (yyval.fa)->annotation = ann; - } - } else { - das_yyerror(scanner,"annotation " + *(yyvsp[0].s) + " is not allowed here", - tokAt(scanner,(yylsp[0])), CompilationError::invalid_annotation); - } - delete (yyvsp[0].s); + { + (yyval.fa) = new AnnotationDeclaration(); + (yyval.fa)->at = tokAt(scanner,(yylsp[0])); + if ( yyextra->g_Access->isAnnotationAllowed(*(yyvsp[0].s), yyextra->g_Program->thisModuleName) ) { + if ( auto ann = findAnnotation(scanner,*(yyvsp[0].s),tokAt(scanner,(yylsp[0]))) ) { + (yyval.fa)->annotation = ann; + } + } else { + das_yyerror(scanner,"annotation " + *(yyvsp[0].s) + " is not allowed here", + tokAt(scanner,(yylsp[0])), CompilationError::invalid_annotation); + } + delete (yyvsp[0].s); } break; case 132: /* annotation_declaration_basic: annotation_declaration_name '(' annotation_argument_list ')' */ - { - (yyval.fa) = new AnnotationDeclaration(); - (yyval.fa)->at = tokAt(scanner,(yylsp[-3])); - if ( yyextra->g_Access->isAnnotationAllowed(*(yyvsp[-3].s), yyextra->g_Program->thisModuleName) ) { - if ( auto ann = findAnnotation(scanner,*(yyvsp[-3].s),tokAt(scanner,(yylsp[-3]))) ) { - (yyval.fa)->annotation = ann; - } - } else { - das_yyerror(scanner,"annotation " + *(yyvsp[-3].s) + " is not allowed here", - tokAt(scanner,(yylsp[-3])), CompilationError::invalid_annotation); - } - swap ( (yyval.fa)->arguments, *(yyvsp[-1].aaList) ); - delete (yyvsp[-1].aaList); - delete (yyvsp[-3].s); + { + (yyval.fa) = new AnnotationDeclaration(); + (yyval.fa)->at = tokAt(scanner,(yylsp[-3])); + if ( yyextra->g_Access->isAnnotationAllowed(*(yyvsp[-3].s), yyextra->g_Program->thisModuleName) ) { + if ( auto ann = findAnnotation(scanner,*(yyvsp[-3].s),tokAt(scanner,(yylsp[-3]))) ) { + (yyval.fa)->annotation = ann; + } + } else { + das_yyerror(scanner,"annotation " + *(yyvsp[-3].s) + " is not allowed here", + tokAt(scanner,(yylsp[-3])), CompilationError::invalid_annotation); + } + swap ( (yyval.fa)->arguments, *(yyvsp[-1].aaList) ); + delete (yyvsp[-1].aaList); + delete (yyvsp[-3].s); } break; case 133: /* annotation_declaration: annotation_declaration_basic */ - { - (yyval.fa) = (yyvsp[0].fa); + { + (yyval.fa) = (yyvsp[0].fa); } break; case 134: /* annotation_declaration: '!' annotation_declaration */ - { - if ( !(yyvsp[0].fa)->annotation->rtti_isFunctionAnnotation() || !((FunctionAnnotation *)((yyvsp[0].fa)->annotation))->isSpecialized() ) { - das_yyerror(scanner,"can only run logical operations on contracts", tokAt(scanner, (yylsp[0])), - CompilationError::invalid_annotation); } - (yyval.fa) = new AnnotationDeclaration(); - (yyval.fa)->at = tokAt(scanner, (yylsp[-1])); - (yyval.fa)->annotation = newLogicAnnotation(LogicAnnotationOp::Not,(yyvsp[0].fa),nullptr); + { + if ( !(yyvsp[0].fa)->annotation->rtti_isFunctionAnnotation() || !((FunctionAnnotation *)((yyvsp[0].fa)->annotation))->isSpecialized() ) { + das_yyerror(scanner,"can only run logical operations on contracts", tokAt(scanner, (yylsp[0])), + CompilationError::invalid_annotation); } + (yyval.fa) = new AnnotationDeclaration(); + (yyval.fa)->at = tokAt(scanner, (yylsp[-1])); + (yyval.fa)->annotation = newLogicAnnotation(LogicAnnotationOp::Not,(yyvsp[0].fa),nullptr); } break; case 135: /* annotation_declaration: annotation_declaration "&&" annotation_declaration */ - { - if ( !(yyvsp[-2].fa)->annotation->rtti_isFunctionAnnotation() || !((FunctionAnnotation *)((yyvsp[-2].fa)->annotation))->isSpecialized() ) { - das_yyerror(scanner,"can only run logical operations on contracts", tokAt(scanner, (yylsp[-2])), - CompilationError::invalid_annotation); } - if ( !(yyvsp[0].fa)->annotation->rtti_isFunctionAnnotation() || !((FunctionAnnotation *)((yyvsp[0].fa)->annotation))->isSpecialized() ) { - das_yyerror(scanner,"can only run logical operations on contracts", tokAt(scanner, (yylsp[0])), - CompilationError::invalid_annotation); } - (yyval.fa) = new AnnotationDeclaration(); - (yyval.fa)->at = tokAt(scanner, (yylsp[-1])); - (yyval.fa)->annotation = newLogicAnnotation(LogicAnnotationOp::And,(yyvsp[-2].fa),(yyvsp[0].fa)); + { + if ( !(yyvsp[-2].fa)->annotation->rtti_isFunctionAnnotation() || !((FunctionAnnotation *)((yyvsp[-2].fa)->annotation))->isSpecialized() ) { + das_yyerror(scanner,"can only run logical operations on contracts", tokAt(scanner, (yylsp[-2])), + CompilationError::invalid_annotation); } + if ( !(yyvsp[0].fa)->annotation->rtti_isFunctionAnnotation() || !((FunctionAnnotation *)((yyvsp[0].fa)->annotation))->isSpecialized() ) { + das_yyerror(scanner,"can only run logical operations on contracts", tokAt(scanner, (yylsp[0])), + CompilationError::invalid_annotation); } + (yyval.fa) = new AnnotationDeclaration(); + (yyval.fa)->at = tokAt(scanner, (yylsp[-1])); + (yyval.fa)->annotation = newLogicAnnotation(LogicAnnotationOp::And,(yyvsp[-2].fa),(yyvsp[0].fa)); } break; case 136: /* annotation_declaration: annotation_declaration "||" annotation_declaration */ - { - if ( !(yyvsp[-2].fa)->annotation || !(yyvsp[-2].fa)->annotation->rtti_isFunctionAnnotation() || !((FunctionAnnotation *)((yyvsp[-2].fa)->annotation))->isSpecialized() ) { - das_yyerror(scanner,"can only run logical operations on contracts", tokAt(scanner, (yylsp[-2])), - CompilationError::invalid_annotation); } - if ( !(yyvsp[0].fa)->annotation || !(yyvsp[0].fa)->annotation->rtti_isFunctionAnnotation() || !((FunctionAnnotation *)((yyvsp[0].fa)->annotation))->isSpecialized() ) { - das_yyerror(scanner,"can only run logical operations on contracts", tokAt(scanner, (yylsp[0])), - CompilationError::invalid_annotation); } - (yyval.fa) = new AnnotationDeclaration(); - (yyval.fa)->at = tokAt(scanner, (yylsp[-1])); - (yyval.fa)->annotation = newLogicAnnotation(LogicAnnotationOp::Or,(yyvsp[-2].fa),(yyvsp[0].fa)); + { + if ( !(yyvsp[-2].fa)->annotation || !(yyvsp[-2].fa)->annotation->rtti_isFunctionAnnotation() || !((FunctionAnnotation *)((yyvsp[-2].fa)->annotation))->isSpecialized() ) { + das_yyerror(scanner,"can only run logical operations on contracts", tokAt(scanner, (yylsp[-2])), + CompilationError::invalid_annotation); } + if ( !(yyvsp[0].fa)->annotation || !(yyvsp[0].fa)->annotation->rtti_isFunctionAnnotation() || !((FunctionAnnotation *)((yyvsp[0].fa)->annotation))->isSpecialized() ) { + das_yyerror(scanner,"can only run logical operations on contracts", tokAt(scanner, (yylsp[0])), + CompilationError::invalid_annotation); } + (yyval.fa) = new AnnotationDeclaration(); + (yyval.fa)->at = tokAt(scanner, (yylsp[-1])); + (yyval.fa)->annotation = newLogicAnnotation(LogicAnnotationOp::Or,(yyvsp[-2].fa),(yyvsp[0].fa)); } break; case 137: /* annotation_declaration: annotation_declaration "^^" annotation_declaration */ - { - if ( !(yyvsp[-2].fa)->annotation->rtti_isFunctionAnnotation() || !((FunctionAnnotation *)((yyvsp[-2].fa)->annotation))->isSpecialized() ) { - das_yyerror(scanner,"can only run logical operations on contracts", tokAt(scanner, (yylsp[-2])), - CompilationError::invalid_annotation); } - if ( !(yyvsp[0].fa)->annotation->rtti_isFunctionAnnotation() || !((FunctionAnnotation *)((yyvsp[0].fa)->annotation))->isSpecialized() ) { - das_yyerror(scanner,"can only run logical operations on contracts", tokAt(scanner, (yylsp[0])), - CompilationError::invalid_annotation); } - (yyval.fa) = new AnnotationDeclaration(); - (yyval.fa)->at = tokAt(scanner, (yylsp[-1])); - (yyval.fa)->annotation = newLogicAnnotation(LogicAnnotationOp::Xor,(yyvsp[-2].fa),(yyvsp[0].fa)); + { + if ( !(yyvsp[-2].fa)->annotation->rtti_isFunctionAnnotation() || !((FunctionAnnotation *)((yyvsp[-2].fa)->annotation))->isSpecialized() ) { + das_yyerror(scanner,"can only run logical operations on contracts", tokAt(scanner, (yylsp[-2])), + CompilationError::invalid_annotation); } + if ( !(yyvsp[0].fa)->annotation->rtti_isFunctionAnnotation() || !((FunctionAnnotation *)((yyvsp[0].fa)->annotation))->isSpecialized() ) { + das_yyerror(scanner,"can only run logical operations on contracts", tokAt(scanner, (yylsp[0])), + CompilationError::invalid_annotation); } + (yyval.fa) = new AnnotationDeclaration(); + (yyval.fa)->at = tokAt(scanner, (yylsp[-1])); + (yyval.fa)->annotation = newLogicAnnotation(LogicAnnotationOp::Xor,(yyvsp[-2].fa),(yyvsp[0].fa)); } break; case 138: /* annotation_declaration: '(' annotation_declaration ')' */ - { - (yyval.fa) = (yyvsp[-1].fa); + { + (yyval.fa) = (yyvsp[-1].fa); } break; case 139: /* annotation_declaration: "|>" annotation_declaration */ - { - (yyval.fa) = (yyvsp[0].fa); - (yyvsp[0].fa)->inherited = true; + { + (yyval.fa) = (yyvsp[0].fa); + (yyvsp[0].fa)->inherited = true; } break; case 140: /* annotation_list: annotation_declaration */ - { - (yyval.faList) = new AnnotationList(); - (yyval.faList)->push_back(AnnotationDeclarationPtr((yyvsp[0].fa))); + { + (yyval.faList) = new AnnotationList(); + (yyval.faList)->push_back(AnnotationDeclarationPtr((yyvsp[0].fa))); } break; case 141: /* annotation_list: annotation_list ',' annotation_declaration */ - { - (yyval.faList) = (yyvsp[-2].faList); - (yyval.faList)->push_back(AnnotationDeclarationPtr((yyvsp[0].fa))); + { + (yyval.faList) = (yyvsp[-2].faList); + (yyval.faList)->push_back(AnnotationDeclarationPtr((yyvsp[0].fa))); } break; @@ -7356,29 +7356,29 @@ YYLTYPE yylloc = yyloc_default; break; case 147: /* optional_function_type: %empty */ - { - (yyval.pTypeDecl) = new TypeDecl(Type::autoinfer); + { + (yyval.pTypeDecl) = new TypeDecl(Type::autoinfer); } break; case 148: /* optional_function_type: ':' type_declaration */ - { - (yyval.pTypeDecl) = (yyvsp[0].pTypeDecl); - (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[0])); + { + (yyval.pTypeDecl) = (yyvsp[0].pTypeDecl); + (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[0])); } break; case 149: /* optional_function_type: "->" type_declaration */ - { - (yyval.pTypeDecl) = (yyvsp[0].pTypeDecl); - (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[0])); + { + (yyval.pTypeDecl) = (yyvsp[0].pTypeDecl); + (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[0])); } break; case 150: /* function_name: "name" */ - { - das_checkName(scanner,*(yyvsp[0].s),tokAt(scanner,(yylsp[0]))); - (yyval.s) = (yyvsp[0].s); + { + das_checkName(scanner,*(yyvsp[0].s),tokAt(scanner,(yylsp[0]))); + (yyval.s) = (yyvsp[0].s); } break; @@ -7823,21 +7823,21 @@ YYLTYPE yylloc = yyloc_default; break; case 261: /* global_function_declaration: optional_annotation_list "def" optional_template function_declaration */ - { - (yyvsp[0].pFuncDecl)->atDecl = tokRangeAt(scanner,(yylsp[-2]),(yylsp[0])); - (yyvsp[0].pFuncDecl)->isTemplate = (yyvsp[-1].b); - assignDefaultArguments((yyvsp[0].pFuncDecl)); - runFunctionAnnotations(scanner, yyextra, (yyvsp[0].pFuncDecl), (yyvsp[-3].faList), tokAt(scanner,(yylsp[-3]))); - if ( (yyvsp[0].pFuncDecl)->isGeneric() ) { - implAddGenericFunction(scanner,(yyvsp[0].pFuncDecl)); - } else { - if ( !yyextra->g_Program->addFunction((yyvsp[0].pFuncDecl)) ) { - das_yyerror(scanner,"function is already defined " + - (yyvsp[0].pFuncDecl)->getMangledName(),(yyvsp[0].pFuncDecl)->at, - CompilationError::function_already_declared); - } - } - (yyvsp[0].pFuncDecl)->delRef(); + { + (yyvsp[0].pFuncDecl)->atDecl = tokRangeAt(scanner,(yylsp[-2]),(yylsp[0])); + (yyvsp[0].pFuncDecl)->isTemplate = (yyvsp[-1].b); + assignDefaultArguments((yyvsp[0].pFuncDecl)); + runFunctionAnnotations(scanner, yyextra, (yyvsp[0].pFuncDecl), (yyvsp[-3].faList), tokAt(scanner,(yylsp[-3]))); + if ( (yyvsp[0].pFuncDecl)->isGeneric() ) { + implAddGenericFunction(scanner,(yyvsp[0].pFuncDecl)); + } else { + if ( !yyextra->g_Program->addFunction((yyvsp[0].pFuncDecl)) ) { + das_yyerror(scanner,"function is already defined " + + (yyvsp[0].pFuncDecl)->getMangledName(),(yyvsp[0].pFuncDecl)->at, + CompilationError::function_already_declared); + } + } + (yyvsp[0].pFuncDecl)->delRef(); } break; @@ -7854,29 +7854,29 @@ YYLTYPE yylloc = yyloc_default; break; case 265: /* function_declaration_header: function_name optional_function_argument_list optional_function_type */ - { - (yyval.pFuncDecl) = ast_functionDeclarationHeader(scanner,(yyvsp[-2].s),(yyvsp[-1].pVarDeclList),(yyvsp[0].pTypeDecl),tokAt(scanner,(yylsp[-2]))); + { + (yyval.pFuncDecl) = ast_functionDeclarationHeader(scanner,(yyvsp[-2].s),(yyvsp[-1].pVarDeclList),(yyvsp[0].pTypeDecl),tokAt(scanner,(yylsp[-2]))); } break; case 266: /* $@9: %empty */ - { - if ( !yyextra->g_CommentReaders.empty() ) { - auto tak = tokAt(scanner,(yylsp[0])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeFunction(tak); - } + { + if ( !yyextra->g_CommentReaders.empty() ) { + auto tak = tokAt(scanner,(yylsp[0])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeFunction(tak); + } } break; case 267: /* function_declaration: optional_public_or_private_function $@9 function_declaration_header expression_block */ - { - (yyvsp[-1].pFuncDecl)->body = (yyvsp[0].pExpression); - (yyvsp[-1].pFuncDecl)->privateFunction = !(yyvsp[-3].b); - (yyval.pFuncDecl) = (yyvsp[-1].pFuncDecl); - if ( !yyextra->g_CommentReaders.empty() ) { - auto tak = tokAt(scanner,(yylsp[0])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->afterFunction((yyvsp[-1].pFuncDecl),tak); - } + { + (yyvsp[-1].pFuncDecl)->body = (yyvsp[0].pExpression); + (yyvsp[-1].pFuncDecl)->privateFunction = !(yyvsp[-3].b); + (yyval.pFuncDecl) = (yyvsp[-1].pFuncDecl); + if ( !yyextra->g_CommentReaders.empty() ) { + auto tak = tokAt(scanner,(yylsp[0])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->afterFunction((yyvsp[-1].pFuncDecl),tak); + } } break; @@ -7897,75 +7897,75 @@ YYLTYPE yylloc = yyloc_default; break; case 272: /* expression_block: open_block expressions close_block */ - { - auto prev_loc = format::Pos::from(tokAt(scanner,(yylsp[-2]))); - handle_brace(prev_loc, (yyvsp[-2].ui), format::get_substring(prev_loc, format::Pos::from_last(tokAt(scanner,(yylsp[-1])))), - yyextra->das_tab_size, format::Pos::from_last(tokAt(scanner,(yylsp[-1])))); - (yyval.pExpression) = (yyvsp[-1].pExpression); - (yyval.pExpression)->at = tokRangeAt(scanner,(yylsp[-2]),(yylsp[0])); + { + auto prev_loc = format::Pos::from(tokAt(scanner,(yylsp[-2]))); + handle_brace(prev_loc, (yyvsp[-2].ui), format::get_substring(prev_loc, format::Pos::from_last(tokAt(scanner,(yylsp[-1])))), + yyextra->das_tab_size, format::Pos::from_last(tokAt(scanner,(yylsp[-1])))); + (yyval.pExpression) = (yyvsp[-1].pExpression); + (yyval.pExpression)->at = tokRangeAt(scanner,(yylsp[-2]),(yylsp[0])); } break; case 273: /* expression_block: open_block expressions close_block "finally" open_block expressions close_block */ - { - auto prev_loc = format::Pos::from(tokAt(scanner,(yylsp[-6]))); - if (format::is_replace_braces() && (yyvsp[-6].ui) != 0xdeadbeef && format::prepare_rule(prev_loc)) { - handle_brace(prev_loc, (yyvsp[-6].ui), format::get_substring(prev_loc, format::Pos::from_last(tokAt(scanner,(yylsp[-5])))), - yyextra->das_tab_size, format::Pos::from_last(tokAt(scanner,(yylsp[-5])))); - auto prev_loc_f = format::Pos::from(tokAt(scanner,(yylsp[-2]))); - assert((yyvsp[-2].ui) != 0xdeadbeef); - { - const auto internal_f = format::get_substring(prev_loc_f, format::Pos::from_last(tokAt(scanner,(yylsp[-1])))); - format::get_writer() << " finally {" << internal_f << "\n" << string((yyvsp[-2].ui) * yyextra->das_tab_size, ' ') + "}"; - format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[-1])))); - } - } - - auto pB = (ExprBlock *) (yyvsp[-5].pExpression); - auto pF = (ExprBlock *) (yyvsp[-1].pExpression); - swap ( pB->finalList, pF->list ); - (yyval.pExpression) = (yyvsp[-5].pExpression); - (yyval.pExpression)->at = tokRangeAt(scanner,(yylsp[-6]),(yylsp[0])); - delete (yyvsp[-1].pExpression); + { + auto prev_loc = format::Pos::from(tokAt(scanner,(yylsp[-6]))); + if (format::is_replace_braces() && (yyvsp[-6].ui) != 0xdeadbeef && format::prepare_rule(prev_loc)) { + handle_brace(prev_loc, (yyvsp[-6].ui), format::get_substring(prev_loc, format::Pos::from_last(tokAt(scanner,(yylsp[-5])))), + yyextra->das_tab_size, format::Pos::from_last(tokAt(scanner,(yylsp[-5])))); + auto prev_loc_f = format::Pos::from(tokAt(scanner,(yylsp[-2]))); + assert((yyvsp[-2].ui) != 0xdeadbeef); + { + const auto internal_f = format::get_substring(prev_loc_f, format::Pos::from_last(tokAt(scanner,(yylsp[-1])))); + format::get_writer() << " finally {" << internal_f << "\n" << string((yyvsp[-2].ui) * yyextra->das_tab_size, ' ') + "}"; + format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[-1])))); + } + } + + auto pB = (ExprBlock *) (yyvsp[-5].pExpression); + auto pF = (ExprBlock *) (yyvsp[-1].pExpression); + swap ( pB->finalList, pF->list ); + (yyval.pExpression) = (yyvsp[-5].pExpression); + (yyval.pExpression)->at = tokRangeAt(scanner,(yylsp[-6]),(yylsp[0])); + delete (yyvsp[-1].pExpression); } break; case 274: /* expr_call_pipe: expr expr_full_block_assumed_piped */ - { - if ( (yyvsp[-1].pExpression)->rtti_isCallLikeExpr() ) { - auto start = format::Pos::from_last(tokAt(scanner, (yylsp[-1]))); - start.column -= 1; // drop ) - if (format::is_replace_braces() && format::prepare_rule(start)) { - if (!((ExprLooksLikeCall *)(yyvsp[-1].pExpression))->arguments.empty()) { - format::get_writer() << ", "; - } - format::get_writer() << format::get_substring(tokAt(scanner, (yylsp[0]))) << ");"; - format::finish_rule(format::Pos::from_last(tokAt(scanner, (yylsp[0])))); - } - ((ExprLooksLikeCall *)(yyvsp[-1].pExpression))->arguments.push_back((yyvsp[0].pExpression)); - (yyval.pExpression) = (yyvsp[-1].pExpression); - } else { - (yyval.pExpression) = (yyvsp[-1].pExpression); - delete (yyvsp[0].pExpression); - } + { + if ( (yyvsp[-1].pExpression)->rtti_isCallLikeExpr() ) { + auto start = format::Pos::from_last(tokAt(scanner, (yylsp[-1]))); + start.column -= 1; // drop ) + if (format::is_replace_braces() && format::prepare_rule(start)) { + if (!((ExprLooksLikeCall *)(yyvsp[-1].pExpression))->arguments.empty()) { + format::get_writer() << ", "; + } + format::get_writer() << format::get_substring(tokAt(scanner, (yylsp[0]))) << ");"; + format::finish_rule(format::Pos::from_last(tokAt(scanner, (yylsp[0])))); + } + ((ExprLooksLikeCall *)(yyvsp[-1].pExpression))->arguments.push_back((yyvsp[0].pExpression)); + (yyval.pExpression) = (yyvsp[-1].pExpression); + } else { + (yyval.pExpression) = (yyvsp[-1].pExpression); + delete (yyvsp[0].pExpression); + } } break; case 275: /* expr_call_pipe: expression_keyword expr_full_block_assumed_piped */ - { - if ( (yyvsp[-1].pExpression)->rtti_isCallLikeExpr() ) { - ((ExprLooksLikeCall *)(yyvsp[-1].pExpression))->arguments.push_back((yyvsp[0].pExpression)); - (yyval.pExpression) = (yyvsp[-1].pExpression); - } else { - (yyval.pExpression) = (yyvsp[-1].pExpression); - delete (yyvsp[0].pExpression); - } + { + if ( (yyvsp[-1].pExpression)->rtti_isCallLikeExpr() ) { + ((ExprLooksLikeCall *)(yyvsp[-1].pExpression))->arguments.push_back((yyvsp[0].pExpression)); + (yyval.pExpression) = (yyvsp[-1].pExpression); + } else { + (yyval.pExpression) = (yyvsp[-1].pExpression); + delete (yyvsp[0].pExpression); + } } break; case 276: /* expr_call_pipe: "generator" '<' type_declaration_no_options '>' optional_capture_list expr_full_block_assumed_piped */ - { - (yyval.pExpression) = ast_makeGenerator(scanner,(yyvsp[-3].pTypeDecl),(yyvsp[-1].pCaptList),(yyvsp[0].pExpression),tokAt(scanner,(yylsp[-5])),tokAt(scanner,(yylsp[-1]))); + { + (yyval.pExpression) = ast_makeGenerator(scanner,(yyvsp[-3].pTypeDecl),(yyvsp[-1].pCaptList),(yyvsp[0].pExpression),tokAt(scanner,(yylsp[-5])),tokAt(scanner,(yylsp[-1]))); } break; @@ -8058,38 +8058,38 @@ YYLTYPE yylloc = yyloc_default; break; case 299: /* expressions: %empty */ - { - (yyval.pExpression) = new ExprBlock(); - (yyval.pExpression)->at = LineInfo(yyextra->g_FileAccessStack.back(), - yylloc.first_column,yylloc.first_line,yylloc.last_column,yylloc.last_line); + { + (yyval.pExpression) = new ExprBlock(); + (yyval.pExpression)->at = LineInfo(yyextra->g_FileAccessStack.back(), + yylloc.first_column,yylloc.first_line,yylloc.last_column,yylloc.last_line); } break; case 300: /* expressions: expressions expression_any */ - { - (yyval.pExpression) = (yyvsp[-1].pExpression); - if ( (yyvsp[0].pExpression) ) { - static_cast((yyvsp[-1].pExpression))->list.push_back((yyvsp[0].pExpression)); - } + { + (yyval.pExpression) = (yyvsp[-1].pExpression); + if ( (yyvsp[0].pExpression) ) { + static_cast((yyvsp[-1].pExpression))->list.push_back((yyvsp[0].pExpression)); + } } break; case 301: /* expressions: expressions error */ - { - delete (yyvsp[-1].pExpression); (yyval.pExpression) = nullptr; YYABORT; + { + delete (yyvsp[-1].pExpression); (yyval.pExpression) = nullptr; YYABORT; } break; case 302: /* expr_keyword: "keyword" expr expression_block */ - { - format::wrap_par_expr(tokAt(scanner,(yylsp[-1])), (yyvsp[-1].pExpression)->at); // wrap match (expr) - auto pCall = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-2])),*(yyvsp[-2].s)); - pCall->arguments.push_back((yyvsp[-1].pExpression)); - auto resT = new TypeDecl(Type::autoinfer); - auto blk = ast_makeBlock(scanner,0,nullptr,nullptr,nullptr,resT,(yyvsp[0].pExpression),tokAt(scanner,(yylsp[0])),tokAt(scanner,(yylsp[0])),LineInfo()); - pCall->arguments.push_back(blk); - delete (yyvsp[-2].s); - (yyval.pExpression) = pCall; + { + format::wrap_par_expr(tokAt(scanner,(yylsp[-1])), (yyvsp[-1].pExpression)->at); // wrap match (expr) + auto pCall = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-2])),*(yyvsp[-2].s)); + pCall->arguments.push_back((yyvsp[-1].pExpression)); + auto resT = new TypeDecl(Type::autoinfer); + auto blk = ast_makeBlock(scanner,0,nullptr,nullptr,nullptr,resT,(yyvsp[0].pExpression),tokAt(scanner,(yylsp[0])),tokAt(scanner,(yylsp[0])),LineInfo()); + pCall->arguments.push_back(blk); + delete (yyvsp[-2].s); + (yyval.pExpression) = pCall; } break; @@ -8118,16 +8118,16 @@ YYLTYPE yylloc = yyloc_default; break; case 309: /* type_declaration_no_options_list: type_declaration */ - { - (yyval.pTypeDeclList) = new vector(); - (yyval.pTypeDeclList)->push_back(new ExprTypeDecl(tokAt(scanner,(yylsp[0])),(yyvsp[0].pTypeDecl))); + { + (yyval.pTypeDeclList) = new vector(); + (yyval.pTypeDeclList)->push_back(new ExprTypeDecl(tokAt(scanner,(yylsp[0])),(yyvsp[0].pTypeDecl))); } break; case 310: /* type_declaration_no_options_list: type_declaration_no_options_list c_or_s type_declaration */ - { - (yyval.pTypeDeclList) = (yyvsp[-2].pTypeDeclList); - (yyval.pTypeDeclList)->push_back(new ExprTypeDecl(tokAt(scanner,(yylsp[0])),(yyvsp[0].pTypeDecl))); + { + (yyval.pTypeDeclList) = (yyvsp[-2].pTypeDeclList); + (yyval.pTypeDeclList)->push_back(new ExprTypeDecl(tokAt(scanner,(yylsp[0])),(yyvsp[0].pTypeDecl))); } break; @@ -8140,11 +8140,11 @@ YYLTYPE yylloc = yyloc_default; break; case 313: /* expression_keyword: "keyword" '<' $@10 type_declaration_no_options_list '>' $@11 expr */ - { - auto pCall = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-6])),tokAt(scanner,(yylsp[0])),*(yyvsp[-6].s)); - pCall->arguments = typesAndSequenceToList((yyvsp[-3].pTypeDeclList),(yyvsp[0].pExpression)); - delete (yyvsp[-6].s); - (yyval.pExpression) = pCall; + { + auto pCall = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-6])),tokAt(scanner,(yylsp[0])),*(yyvsp[-6].s)); + pCall->arguments = typesAndSequenceToList((yyvsp[-3].pTypeDeclList),(yyvsp[0].pExpression)); + delete (yyvsp[-6].s); + (yyval.pExpression) = pCall; } break; @@ -8157,85 +8157,85 @@ YYLTYPE yylloc = yyloc_default; break; case 316: /* expression_keyword: "type function" '<' $@12 type_declaration_no_options_list '>' $@13 optional_expr_list_in_braces */ - { - auto pCall = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-6])),tokAt(scanner,(yylsp[0])),*(yyvsp[-6].s)); - pCall->arguments = typesAndSequenceToList((yyvsp[-3].pTypeDeclList),(yyvsp[0].pExpression)); - delete (yyvsp[-6].s); - (yyval.pExpression) = pCall; + { + auto pCall = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-6])),tokAt(scanner,(yylsp[0])),*(yyvsp[-6].s)); + pCall->arguments = typesAndSequenceToList((yyvsp[-3].pTypeDeclList),(yyvsp[0].pExpression)); + delete (yyvsp[-6].s); + (yyval.pExpression) = pCall; } break; case 317: /* expr_pipe: expr_assign " <|" expr_block */ - { - Expression * pipeCall = (yyvsp[-2].pExpression)->tail(); - if ( pipeCall->rtti_isCallLikeExpr() ) { - auto pCall = (ExprLooksLikeCall *) pipeCall; - pCall->arguments.push_back((yyvsp[0].pExpression)); - (yyval.pExpression) = (yyvsp[-2].pExpression); - } else if ( pipeCall->rtti_isVar() ) { - // a += b <| c - auto pVar = (ExprVar *) pipeCall; - auto pCall = yyextra->g_Program->makeCall(pVar->at,pVar->name); - pCall->arguments.push_back((yyvsp[0].pExpression)); - if ( !(yyvsp[-2].pExpression)->swap_tail(pVar,pCall) ) { - delete pVar; - (yyval.pExpression) = pCall; - } else { - (yyval.pExpression) = (yyvsp[-2].pExpression); - } - } else if ( pipeCall->rtti_isMakeStruct() ) { - auto pMS = (ExprMakeStruct *) pipeCall; - if ( pMS->block ) { - das_yyerror(scanner,"can't pipe into [[ make structure ]]. it already has where closure", - tokAt(scanner,(yylsp[-1])),CompilationError::cant_pipe); - delete (yyvsp[0].pExpression); - } else { - pMS->block = (yyvsp[0].pExpression); - } - (yyval.pExpression) = (yyvsp[-2].pExpression); - } else { - das_yyerror(scanner,"can only pipe into function call or [[ make structure ]]", - tokAt(scanner,(yylsp[-1])),CompilationError::cant_pipe); - delete (yyvsp[0].pExpression); - (yyval.pExpression) = (yyvsp[-2].pExpression); - } + { + Expression * pipeCall = (yyvsp[-2].pExpression)->tail(); + if ( pipeCall->rtti_isCallLikeExpr() ) { + auto pCall = (ExprLooksLikeCall *) pipeCall; + pCall->arguments.push_back((yyvsp[0].pExpression)); + (yyval.pExpression) = (yyvsp[-2].pExpression); + } else if ( pipeCall->rtti_isVar() ) { + // a += b <| c + auto pVar = (ExprVar *) pipeCall; + auto pCall = yyextra->g_Program->makeCall(pVar->at,pVar->name); + pCall->arguments.push_back((yyvsp[0].pExpression)); + if ( !(yyvsp[-2].pExpression)->swap_tail(pVar,pCall) ) { + delete pVar; + (yyval.pExpression) = pCall; + } else { + (yyval.pExpression) = (yyvsp[-2].pExpression); + } + } else if ( pipeCall->rtti_isMakeStruct() ) { + auto pMS = (ExprMakeStruct *) pipeCall; + if ( pMS->block ) { + das_yyerror(scanner,"can't pipe into [[ make structure ]]. it already has where closure", + tokAt(scanner,(yylsp[-1])),CompilationError::cant_pipe); + delete (yyvsp[0].pExpression); + } else { + pMS->block = (yyvsp[0].pExpression); + } + (yyval.pExpression) = (yyvsp[-2].pExpression); + } else { + das_yyerror(scanner,"can only pipe into function call or [[ make structure ]]", + tokAt(scanner,(yylsp[-1])),CompilationError::cant_pipe); + delete (yyvsp[0].pExpression); + (yyval.pExpression) = (yyvsp[-2].pExpression); + } } break; case 318: /* expr_pipe: "@ <|" expr_block */ - { - if (format::is_replace_braces() && format::prepare_rule(format::Pos::from(tokAt(scanner, (yylsp[-1]))))) { - format::get_writer() << "@"; - format::finish_rule(format::Pos::from_last(tokAt(scanner, (yylsp[-1])))); - } - - (yyval.pExpression) = (yyvsp[0].pExpression); + { + if (format::is_replace_braces() && format::prepare_rule(format::Pos::from(tokAt(scanner, (yylsp[-1]))))) { + format::get_writer() << "@"; + format::finish_rule(format::Pos::from_last(tokAt(scanner, (yylsp[-1])))); + } + + (yyval.pExpression) = (yyvsp[0].pExpression); } break; case 319: /* expr_pipe: "@@ <|" expr_block */ - { - if (format::is_replace_braces() && format::prepare_rule(format::Pos::from(tokAt(scanner, (yylsp[-1]))))) { - format::get_writer() << "@@"; - format::finish_rule(format::Pos::from_last(tokAt(scanner, (yylsp[-1])))); - } - (yyval.pExpression) = (yyvsp[0].pExpression); + { + if (format::is_replace_braces() && format::prepare_rule(format::Pos::from(tokAt(scanner, (yylsp[-1]))))) { + format::get_writer() << "@@"; + format::finish_rule(format::Pos::from_last(tokAt(scanner, (yylsp[-1])))); + } + (yyval.pExpression) = (yyvsp[0].pExpression); } break; case 320: /* expr_pipe: "$ <|" expr_block */ - { - if (format::is_replace_braces() && format::prepare_rule(format::Pos::from(tokAt(scanner, (yylsp[-1]))))) { - format::get_writer() << "$"; - format::finish_rule(format::Pos::from_last(tokAt(scanner, (yylsp[-1])))); - } - (yyval.pExpression) = (yyvsp[0].pExpression); + { + if (format::is_replace_braces() && format::prepare_rule(format::Pos::from(tokAt(scanner, (yylsp[-1]))))) { + format::get_writer() << "$"; + format::finish_rule(format::Pos::from_last(tokAt(scanner, (yylsp[-1])))); + } + (yyval.pExpression) = (yyvsp[0].pExpression); } break; case 321: /* expr_pipe: expr_call_pipe */ - { - (yyval.pExpression) = (yyvsp[0].pExpression); + { + (yyval.pExpression) = (yyvsp[0].pExpression); } break; @@ -8244,16 +8244,16 @@ YYLTYPE yylloc = yyloc_default; break; case 323: /* name_in_namespace: "name" "::" "name" */ - { - auto ita = yyextra->das_module_alias.find(*(yyvsp[-2].s)); - if ( ita == yyextra->das_module_alias.end() ) { - *(yyvsp[-2].s) += "::"; - } else { - *(yyvsp[-2].s) = ita->second + "::"; - } - *(yyvsp[-2].s) += *(yyvsp[0].s); - delete (yyvsp[0].s); - (yyval.s) = (yyvsp[-2].s); + { + auto ita = yyextra->das_module_alias.find(*(yyvsp[-2].s)); + if ( ita == yyextra->das_module_alias.end() ) { + *(yyvsp[-2].s) += "::"; + } else { + *(yyvsp[-2].s) = ita->second + "::"; + } + *(yyvsp[-2].s) += *(yyvsp[0].s); + delete (yyvsp[0].s); + (yyval.s) = (yyvsp[-2].s); } break; @@ -8262,16 +8262,16 @@ YYLTYPE yylloc = yyloc_default; break; case 325: /* expression_delete: "delete" expr */ - { - (yyval.pExpression) = new ExprDelete(tokAt(scanner,(yylsp[-1])), (yyvsp[0].pExpression)); + { + (yyval.pExpression) = new ExprDelete(tokAt(scanner,(yylsp[-1])), (yyvsp[0].pExpression)); } break; case 326: /* expression_delete: "delete" "explicit" expr */ - { - auto delExpr = new ExprDelete(tokAt(scanner,(yylsp[-2])), (yyvsp[0].pExpression)); - delExpr->native = true; - (yyval.pExpression) = delExpr; + { + auto delExpr = new ExprDelete(tokAt(scanner,(yylsp[-2])), (yyvsp[0].pExpression)); + delExpr->native = true; + (yyval.pExpression) = delExpr; } break; @@ -8284,60 +8284,60 @@ YYLTYPE yylloc = yyloc_default; break; case 329: /* new_type_declaration: '<' $@14 type_declaration '>' $@15 */ - { - (yyval.pTypeDecl) = (yyvsp[-2].pTypeDecl); + { + (yyval.pTypeDecl) = (yyvsp[-2].pTypeDecl); } break; case 330: /* new_type_declaration: structure_type_declaration */ - { - (yyval.pTypeDecl) = (yyvsp[0].pTypeDecl); + { + (yyval.pTypeDecl) = (yyvsp[0].pTypeDecl); } break; case 331: /* expr_new: "new" new_type_declaration */ - { - (yyval.pExpression) = new ExprNew(tokAt(scanner,(yylsp[-1])),(yyvsp[0].pTypeDecl),false); + { + (yyval.pExpression) = new ExprNew(tokAt(scanner,(yylsp[-1])),(yyvsp[0].pTypeDecl),false); } break; case 332: /* expr_new: "new" new_type_declaration '(' use_initializer ')' */ - { - (yyval.pExpression) = new ExprNew(tokAt(scanner,(yylsp[-4])),(yyvsp[-3].pTypeDecl),true); - ((ExprNew *)(yyval.pExpression))->initializer = (yyvsp[-1].b); + { + (yyval.pExpression) = new ExprNew(tokAt(scanner,(yylsp[-4])),(yyvsp[-3].pTypeDecl),true); + ((ExprNew *)(yyval.pExpression))->initializer = (yyvsp[-1].b); } break; case 333: /* expr_new: "new" new_type_declaration '(' expr_list ')' */ - { - auto pNew = new ExprNew(tokAt(scanner,(yylsp[-4])),(yyvsp[-3].pTypeDecl),true); - (yyval.pExpression) = parseFunctionArguments(pNew,(yyvsp[-1].pExpression)); + { + auto pNew = new ExprNew(tokAt(scanner,(yylsp[-4])),(yyvsp[-3].pTypeDecl),true); + (yyval.pExpression) = parseFunctionArguments(pNew,(yyvsp[-1].pExpression)); } break; case 334: /* expr_new: "new" new_type_declaration '(' make_struct_single ')' */ - { - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->at = tokAt(scanner,(yylsp[-3])); - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->makeType = (yyvsp[-3].pTypeDecl); - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->useInitializer = true; // $init; - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->alwaysUseInitializer = true; - (yyval.pExpression) = new ExprAscend(tokAt(scanner,(yylsp[-4])),(yyvsp[-1].pExpression)); + { + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->at = tokAt(scanner,(yylsp[-3])); + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->makeType = (yyvsp[-3].pTypeDecl); + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->useInitializer = true; // $init; + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->alwaysUseInitializer = true; + (yyval.pExpression) = new ExprAscend(tokAt(scanner,(yylsp[-4])),(yyvsp[-1].pExpression)); } break; case 335: /* expr_new: "new" new_type_declaration '(' "uninitialized" make_struct_single ')' */ - { - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->at = tokAt(scanner,(yylsp[-4])); - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->makeType = (yyvsp[-4].pTypeDecl); - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->useInitializer = false; // $init; - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->alwaysUseInitializer = true; - (yyval.pExpression) = new ExprAscend(tokAt(scanner,(yylsp[-5])),(yyvsp[-1].pExpression)); + { + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->at = tokAt(scanner,(yylsp[-4])); + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->makeType = (yyvsp[-4].pTypeDecl); + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->useInitializer = false; // $init; + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->alwaysUseInitializer = true; + (yyval.pExpression) = new ExprAscend(tokAt(scanner,(yylsp[-5])),(yyvsp[-1].pExpression)); } break; case 336: /* expr_new: "new" make_decl */ - { - (yyval.pExpression) = new ExprAscend(tokAt(scanner,(yylsp[-1])),(yyvsp[0].pExpression)); + { + (yyval.pExpression) = new ExprAscend(tokAt(scanner,(yylsp[-1])),(yyvsp[0].pExpression)); } break; @@ -8350,88 +8350,88 @@ YYLTYPE yylloc = yyloc_default; break; case 339: /* expression_return_no_pipe: "return" */ - { - (yyval.pExpression) = new ExprReturn(tokAt(scanner,(yylsp[0])),nullptr); + { + (yyval.pExpression) = new ExprReturn(tokAt(scanner,(yylsp[0])),nullptr); } break; case 340: /* expression_return_no_pipe: "return" expr_list */ - { - (yyval.pExpression) = new ExprReturn(tokAt(scanner,(yylsp[-1])),sequenceToTuple((yyvsp[0].pExpression))); + { + (yyval.pExpression) = new ExprReturn(tokAt(scanner,(yylsp[-1])),sequenceToTuple((yyvsp[0].pExpression))); } break; case 341: /* expression_return_no_pipe: "return" "<-" expr_list */ - { - auto pRet = new ExprReturn(tokAt(scanner,(yylsp[-2])),sequenceToTuple((yyvsp[0].pExpression))); - pRet->moveSemantics = true; - (yyval.pExpression) = pRet; + { + auto pRet = new ExprReturn(tokAt(scanner,(yylsp[-2])),sequenceToTuple((yyvsp[0].pExpression))); + pRet->moveSemantics = true; + (yyval.pExpression) = pRet; } break; case 342: /* expression_return: expression_return_no_pipe semicolon */ - { - (yyval.pExpression) = (yyvsp[-1].pExpression); + { + (yyval.pExpression) = (yyvsp[-1].pExpression); } break; case 343: /* expression_return: "return" expr_pipe */ - { - (yyval.pExpression) = new ExprReturn(tokAt(scanner,(yylsp[-1])),(yyvsp[0].pExpression)); + { + (yyval.pExpression) = new ExprReturn(tokAt(scanner,(yylsp[-1])),(yyvsp[0].pExpression)); } break; case 344: /* expression_return: "return" "<-" expr_pipe */ - { - auto pRet = new ExprReturn(tokAt(scanner,(yylsp[-2])),(yyvsp[0].pExpression)); - pRet->moveSemantics = true; - (yyval.pExpression) = pRet; + { + auto pRet = new ExprReturn(tokAt(scanner,(yylsp[-2])),(yyvsp[0].pExpression)); + pRet->moveSemantics = true; + (yyval.pExpression) = pRet; } break; case 345: /* expression_yield_no_pipe: "yield" expr */ - { - (yyval.pExpression) = new ExprYield(tokAt(scanner,(yylsp[-1])),(yyvsp[0].pExpression)); + { + (yyval.pExpression) = new ExprYield(tokAt(scanner,(yylsp[-1])),(yyvsp[0].pExpression)); } break; case 346: /* expression_yield_no_pipe: "yield" "<-" expr */ - { - auto pRet = new ExprYield(tokAt(scanner,(yylsp[-2])),(yyvsp[0].pExpression)); - pRet->moveSemantics = true; - (yyval.pExpression) = pRet; + { + auto pRet = new ExprYield(tokAt(scanner,(yylsp[-2])),(yyvsp[0].pExpression)); + pRet->moveSemantics = true; + (yyval.pExpression) = pRet; } break; case 347: /* expression_yield: expression_yield_no_pipe semicolon */ - { - (yyval.pExpression) = (yyvsp[-1].pExpression); + { + (yyval.pExpression) = (yyvsp[-1].pExpression); } break; case 348: /* expression_yield: "yield" expr_pipe */ - { - (yyval.pExpression) = new ExprYield(tokAt(scanner,(yylsp[-1])),(yyvsp[0].pExpression)); + { + (yyval.pExpression) = new ExprYield(tokAt(scanner,(yylsp[-1])),(yyvsp[0].pExpression)); } break; case 349: /* expression_yield: "yield" "<-" expr_pipe */ - { - auto pRet = new ExprYield(tokAt(scanner,(yylsp[-2])),(yyvsp[0].pExpression)); - pRet->moveSemantics = true; - (yyval.pExpression) = pRet; + { + auto pRet = new ExprYield(tokAt(scanner,(yylsp[-2])),(yyvsp[0].pExpression)); + pRet->moveSemantics = true; + (yyval.pExpression) = pRet; } break; case 350: /* expression_try_catch: "try" expression_block "recover" expression_block */ - { - const auto end_block = format::Pos::from_last(tokAt(scanner, (yylsp[-2]))); - const auto start = format::Pos::from(tokAt(scanner, (yylsp[-3]))); - if (format::is_replace_braces()) { - format::skip_spaces_or_print(tokAt(scanner, (yylsp[-3])), tokAt(scanner, (yylsp[-2])), tokAt(scanner, (yylsp[-1])), yyextra->das_tab_size); - } - - (yyval.pExpression) = new ExprTryCatch(tokAt(scanner,(yylsp[-3])),(yyvsp[-2].pExpression),(yyvsp[0].pExpression)); + { + const auto end_block = format::Pos::from_last(tokAt(scanner, (yylsp[-2]))); + const auto start = format::Pos::from(tokAt(scanner, (yylsp[-3]))); + if (format::is_replace_braces()) { + format::skip_spaces_or_print(tokAt(scanner, (yylsp[-3])), tokAt(scanner, (yylsp[-2])), tokAt(scanner, (yylsp[-1])), yyextra->das_tab_size); + } + + (yyval.pExpression) = new ExprTryCatch(tokAt(scanner,(yylsp[-3])),(yyvsp[-2].pExpression),(yyvsp[0].pExpression)); } break; @@ -8464,83 +8464,83 @@ YYLTYPE yylloc = yyloc_default; break; case 358: /* tuple_expansion: "name" */ - { - (yyval.pNameList) = new vector(); - (yyval.pNameList)->push_back(*(yyvsp[0].s)); - delete (yyvsp[0].s); + { + (yyval.pNameList) = new vector(); + (yyval.pNameList)->push_back(*(yyvsp[0].s)); + delete (yyvsp[0].s); } break; case 359: /* tuple_expansion: tuple_expansion ',' "name" */ - { - (yyvsp[-2].pNameList)->push_back(*(yyvsp[0].s)); - delete (yyvsp[0].s); - (yyval.pNameList) = (yyvsp[-2].pNameList); + { + (yyvsp[-2].pNameList)->push_back(*(yyvsp[0].s)); + delete (yyvsp[0].s); + (yyval.pNameList) = (yyvsp[-2].pNameList); } break; case 360: /* tuple_expansion_variable_declaration: "[[" tuple_expansion ']' ']' ':' type_declaration_no_options copy_or_move_or_clone expr semicolon */ - { - // std::cout << "case11" << std::endl; - format::replace_with(false, - format::Pos::from(tokAt(scanner,(yylsp[-8]))), - format::substring_between(tokAt(scanner, (yylsp[-8])), tokAt(scanner, (yylsp[-6]))), - format::Pos::from_last(tokAt(scanner,(yylsp[-5]))), "(", ")"); - (yyval.pVarDecl) = new VariableDeclaration((yyvsp[-7].pNameList),tokAt(scanner,(yylsp[-7])),(yyvsp[-3].pTypeDecl),(yyvsp[-1].pExpression)); - (yyval.pVarDecl)->init_via_move = ((yyvsp[-2].i) & CorM_MOVE) !=0; - (yyval.pVarDecl)->init_via_clone = ((yyvsp[-2].i) & CorM_CLONE) !=0; - (yyval.pVarDecl)->isTupleExpansion = true; + { + // std::cout << "case11" << std::endl; + format::replace_with(false, + format::Pos::from(tokAt(scanner,(yylsp[-8]))), + format::substring_between(tokAt(scanner, (yylsp[-8])), tokAt(scanner, (yylsp[-6]))), + format::Pos::from_last(tokAt(scanner,(yylsp[-5]))), "(", ")"); + (yyval.pVarDecl) = new VariableDeclaration((yyvsp[-7].pNameList),tokAt(scanner,(yylsp[-7])),(yyvsp[-3].pTypeDecl),(yyvsp[-1].pExpression)); + (yyval.pVarDecl)->init_via_move = ((yyvsp[-2].i) & CorM_MOVE) !=0; + (yyval.pVarDecl)->init_via_clone = ((yyvsp[-2].i) & CorM_CLONE) !=0; + (yyval.pVarDecl)->isTupleExpansion = true; } break; case 361: /* tuple_expansion_variable_declaration: '(' tuple_expansion ')' ':' type_declaration_no_options copy_or_move_or_clone expr semicolon */ - { - (yyval.pVarDecl) = new VariableDeclaration((yyvsp[-6].pNameList),tokAt(scanner,(yylsp[-6])),(yyvsp[-3].pTypeDecl),(yyvsp[-1].pExpression)); - (yyval.pVarDecl)->init_via_move = ((yyvsp[-2].i) & CorM_MOVE) !=0; - (yyval.pVarDecl)->init_via_clone = ((yyvsp[-2].i) & CorM_CLONE) !=0; - (yyval.pVarDecl)->isTupleExpansion = true; + { + (yyval.pVarDecl) = new VariableDeclaration((yyvsp[-6].pNameList),tokAt(scanner,(yylsp[-6])),(yyvsp[-3].pTypeDecl),(yyvsp[-1].pExpression)); + (yyval.pVarDecl)->init_via_move = ((yyvsp[-2].i) & CorM_MOVE) !=0; + (yyval.pVarDecl)->init_via_clone = ((yyvsp[-2].i) & CorM_CLONE) !=0; + (yyval.pVarDecl)->isTupleExpansion = true; } break; case 362: /* tuple_expansion_variable_declaration: "[[" tuple_expansion ']' ']' optional_ref copy_or_move_or_clone expr semicolon */ - { - // std::cout << "case12" << std::endl; - format::replace_with(false, - format::Pos::from(tokAt(scanner,(yylsp[-7]))), - format::substring_between(tokAt(scanner, (yylsp[-7])), tokAt(scanner, (yylsp[-5]))), - format::Pos::from_last(tokAt(scanner,(yylsp[-4]))), "(", ")"); - - auto typeDecl = new TypeDecl(Type::autoinfer); - typeDecl->at = tokAt(scanner,(yylsp[-6])); - typeDecl->ref = (yyvsp[-3].b); - (yyval.pVarDecl) = new VariableDeclaration((yyvsp[-6].pNameList),tokAt(scanner,(yylsp[-6])),typeDecl,(yyvsp[-1].pExpression)); - (yyval.pVarDecl)->init_via_move = ((yyvsp[-2].i) & CorM_MOVE) !=0; - (yyval.pVarDecl)->init_via_clone = ((yyvsp[-2].i) & CorM_CLONE) !=0; - (yyval.pVarDecl)->isTupleExpansion = true; + { + // std::cout << "case12" << std::endl; + format::replace_with(false, + format::Pos::from(tokAt(scanner,(yylsp[-7]))), + format::substring_between(tokAt(scanner, (yylsp[-7])), tokAt(scanner, (yylsp[-5]))), + format::Pos::from_last(tokAt(scanner,(yylsp[-4]))), "(", ")"); + + auto typeDecl = new TypeDecl(Type::autoinfer); + typeDecl->at = tokAt(scanner,(yylsp[-6])); + typeDecl->ref = (yyvsp[-3].b); + (yyval.pVarDecl) = new VariableDeclaration((yyvsp[-6].pNameList),tokAt(scanner,(yylsp[-6])),typeDecl,(yyvsp[-1].pExpression)); + (yyval.pVarDecl)->init_via_move = ((yyvsp[-2].i) & CorM_MOVE) !=0; + (yyval.pVarDecl)->init_via_clone = ((yyvsp[-2].i) & CorM_CLONE) !=0; + (yyval.pVarDecl)->isTupleExpansion = true; } break; case 363: /* tuple_expansion_variable_declaration: '(' tuple_expansion ')' optional_ref copy_or_move_or_clone expr semicolon */ - { - auto typeDecl = new TypeDecl(Type::autoinfer); - typeDecl->at = tokAt(scanner,(yylsp[-5])); - typeDecl->ref = (yyvsp[-3].b); - (yyval.pVarDecl) = new VariableDeclaration((yyvsp[-5].pNameList),tokAt(scanner,(yylsp[-5])),typeDecl,(yyvsp[-1].pExpression)); - (yyval.pVarDecl)->init_via_move = ((yyvsp[-2].i) & CorM_MOVE) !=0; - (yyval.pVarDecl)->init_via_clone = ((yyvsp[-2].i) & CorM_CLONE) !=0; - (yyval.pVarDecl)->isTupleExpansion = true; + { + auto typeDecl = new TypeDecl(Type::autoinfer); + typeDecl->at = tokAt(scanner,(yylsp[-5])); + typeDecl->ref = (yyvsp[-3].b); + (yyval.pVarDecl) = new VariableDeclaration((yyvsp[-5].pNameList),tokAt(scanner,(yylsp[-5])),typeDecl,(yyvsp[-1].pExpression)); + (yyval.pVarDecl)->init_via_move = ((yyvsp[-2].i) & CorM_MOVE) !=0; + (yyval.pVarDecl)->init_via_clone = ((yyvsp[-2].i) & CorM_CLONE) !=0; + (yyval.pVarDecl)->isTupleExpansion = true; } break; case 364: /* expression_let: kwd_let optional_in_scope let_variable_declaration */ - { - (yyval.pExpression) = ast_Let(scanner,(yyvsp[-2].b),(yyvsp[-1].b),(yyvsp[0].pVarDecl),tokAt(scanner,(yylsp[-2])),tokAt(scanner,(yylsp[0]))); + { + (yyval.pExpression) = ast_Let(scanner,(yyvsp[-2].b),(yyvsp[-1].b),(yyvsp[0].pVarDecl),tokAt(scanner,(yylsp[-2])),tokAt(scanner,(yylsp[0]))); } break; case 365: /* expression_let: kwd_let optional_in_scope tuple_expansion_variable_declaration */ - { - (yyval.pExpression) = ast_Let(scanner,(yyvsp[-2].b),(yyvsp[-1].b),(yyvsp[0].pVarDecl),tokAt(scanner,(yylsp[-2])),tokAt(scanner,(yylsp[0]))); + { + (yyval.pExpression) = ast_Let(scanner,(yyvsp[-2].b),(yyvsp[-1].b),(yyvsp[0].pVarDecl),tokAt(scanner,(yylsp[-2])),tokAt(scanner,(yylsp[0]))); } break; @@ -8553,8 +8553,8 @@ YYLTYPE yylloc = yyloc_default; break; case 368: /* expr_cast: "cast" '<' $@16 type_declaration_no_options '>' $@17 expr */ - { - (yyval.pExpression) = new ExprCast(tokAt(scanner,(yylsp[-6])),(yyvsp[0].pExpression),(yyvsp[-3].pTypeDecl)); + { + (yyval.pExpression) = new ExprCast(tokAt(scanner,(yylsp[-6])),(yyvsp[0].pExpression),(yyvsp[-3].pTypeDecl)); } break; @@ -8567,10 +8567,10 @@ YYLTYPE yylloc = yyloc_default; break; case 371: /* expr_cast: "upcast" '<' $@18 type_declaration_no_options '>' $@19 expr */ - { - auto pCast = new ExprCast(tokAt(scanner,(yylsp[-6])),(yyvsp[0].pExpression),(yyvsp[-3].pTypeDecl)); - pCast->upcast = true; - (yyval.pExpression) = pCast; + { + auto pCast = new ExprCast(tokAt(scanner,(yylsp[-6])),(yyvsp[0].pExpression),(yyvsp[-3].pTypeDecl)); + pCast->upcast = true; + (yyval.pExpression) = pCast; } break; @@ -8583,10 +8583,10 @@ YYLTYPE yylloc = yyloc_default; break; case 374: /* expr_cast: "reinterpret" '<' $@20 type_declaration_no_options '>' $@21 expr */ - { - auto pCast = new ExprCast(tokAt(scanner,(yylsp[-6])),(yyvsp[0].pExpression),(yyvsp[-3].pTypeDecl)); - pCast->reinterpret = true; - (yyval.pExpression) = pCast; + { + auto pCast = new ExprCast(tokAt(scanner,(yylsp[-6])),(yyvsp[0].pExpression),(yyvsp[-3].pTypeDecl)); + pCast->reinterpret = true; + (yyval.pExpression) = pCast; } break; @@ -8599,118 +8599,118 @@ YYLTYPE yylloc = yyloc_default; break; case 377: /* expr_type_decl: "type" '<' $@22 type_declaration '>' $@23 */ - { - (yyval.pExpression) = new ExprTypeDecl(tokAt(scanner,(yylsp[-5])),(yyvsp[-2].pTypeDecl)); + { + (yyval.pExpression) = new ExprTypeDecl(tokAt(scanner,(yylsp[-5])),(yyvsp[-2].pTypeDecl)); } break; case 378: /* expr_type_info: "typeinfo" '(' name_in_namespace expr ')' */ - { - format::replace_with(false, - format::Pos::from(tokAt(scanner,(yylsp[-3]))), - format::get_substring(tokAt(scanner,(yylsp[-2]))), - format::Pos::from(tokAt(scanner,(yylsp[-1]))), " ", "("); - if ( (yyvsp[-1].pExpression)->rtti_isTypeDecl() ) { - auto ptd = (ExprTypeDecl *)(yyvsp[-1].pExpression); - (yyval.pExpression) = new ExprTypeInfo(tokAt(scanner,(yylsp[-4])),*(yyvsp[-2].s),ptd->typeexpr); - delete (yyvsp[-1].pExpression); - } else { - (yyval.pExpression) = new ExprTypeInfo(tokAt(scanner,(yylsp[-4])),*(yyvsp[-2].s),(yyvsp[-1].pExpression)); - } - delete (yyvsp[-2].s); + { + format::replace_with(false, + format::Pos::from(tokAt(scanner,(yylsp[-3]))), + format::get_substring(tokAt(scanner,(yylsp[-2]))), + format::Pos::from(tokAt(scanner,(yylsp[-1]))), " ", "("); + if ( (yyvsp[-1].pExpression)->rtti_isTypeDecl() ) { + auto ptd = (ExprTypeDecl *)(yyvsp[-1].pExpression); + (yyval.pExpression) = new ExprTypeInfo(tokAt(scanner,(yylsp[-4])),*(yyvsp[-2].s),ptd->typeexpr); + delete (yyvsp[-1].pExpression); + } else { + (yyval.pExpression) = new ExprTypeInfo(tokAt(scanner,(yylsp[-4])),*(yyvsp[-2].s),(yyvsp[-1].pExpression)); + } + delete (yyvsp[-2].s); } break; case 379: /* expr_type_info: "typeinfo" '(' name_in_namespace '<' "name" '>' expr ')' */ - { - format::replace_with(false, - format::Pos::from(tokAt(scanner,(yylsp[-6]))), - format::get_substring(tokRangeAt(scanner,(yylsp[-5]),(yylsp[-2]))), - format::Pos::from(tokAt(scanner,(yylsp[-1]))), " ", "("); - - if ( (yyvsp[-1].pExpression)->rtti_isTypeDecl() ) { - auto ptd = (ExprTypeDecl *)(yyvsp[-1].pExpression); - (yyval.pExpression) = new ExprTypeInfo(tokAt(scanner,(yylsp[-7])),*(yyvsp[-5].s),ptd->typeexpr,*(yyvsp[-3].s)); - delete (yyvsp[-1].pExpression); - } else { - (yyval.pExpression) = new ExprTypeInfo(tokAt(scanner,(yylsp[-7])),*(yyvsp[-5].s),(yyvsp[-1].pExpression),*(yyvsp[-3].s)); - } - delete (yyvsp[-5].s); - delete (yyvsp[-3].s); + { + format::replace_with(false, + format::Pos::from(tokAt(scanner,(yylsp[-6]))), + format::get_substring(tokRangeAt(scanner,(yylsp[-5]),(yylsp[-2]))), + format::Pos::from(tokAt(scanner,(yylsp[-1]))), " ", "("); + + if ( (yyvsp[-1].pExpression)->rtti_isTypeDecl() ) { + auto ptd = (ExprTypeDecl *)(yyvsp[-1].pExpression); + (yyval.pExpression) = new ExprTypeInfo(tokAt(scanner,(yylsp[-7])),*(yyvsp[-5].s),ptd->typeexpr,*(yyvsp[-3].s)); + delete (yyvsp[-1].pExpression); + } else { + (yyval.pExpression) = new ExprTypeInfo(tokAt(scanner,(yylsp[-7])),*(yyvsp[-5].s),(yyvsp[-1].pExpression),*(yyvsp[-3].s)); + } + delete (yyvsp[-5].s); + delete (yyvsp[-3].s); } break; case 380: /* expr_type_info: "typeinfo" '(' name_in_namespace '<' "name" c_or_s "name" '>' expr ')' */ - { - format::replace_with(false, - format::Pos::from(tokAt(scanner,(yylsp[-8]))), - format::get_substring(tokRangeAt(scanner,(yylsp[-7]),(yylsp[-2]))), - format::Pos::from(tokAt(scanner,(yylsp[-1]))), " ", "("); - - if ( (yyvsp[-1].pExpression)->rtti_isTypeDecl() ) { - auto ptd = (ExprTypeDecl *)(yyvsp[-1].pExpression); - (yyval.pExpression) = new ExprTypeInfo(tokAt(scanner,(yylsp[-9])),*(yyvsp[-7].s),ptd->typeexpr,*(yyvsp[-5].s),*(yyvsp[-3].s)); - delete (yyvsp[-1].pExpression); - } else { - (yyval.pExpression) = new ExprTypeInfo(tokAt(scanner,(yylsp[-9])),*(yyvsp[-7].s),(yyvsp[-1].pExpression),*(yyvsp[-5].s),*(yyvsp[-3].s)); - } - delete (yyvsp[-7].s); - delete (yyvsp[-5].s); - delete (yyvsp[-3].s); + { + format::replace_with(false, + format::Pos::from(tokAt(scanner,(yylsp[-8]))), + format::get_substring(tokRangeAt(scanner,(yylsp[-7]),(yylsp[-2]))), + format::Pos::from(tokAt(scanner,(yylsp[-1]))), " ", "("); + + if ( (yyvsp[-1].pExpression)->rtti_isTypeDecl() ) { + auto ptd = (ExprTypeDecl *)(yyvsp[-1].pExpression); + (yyval.pExpression) = new ExprTypeInfo(tokAt(scanner,(yylsp[-9])),*(yyvsp[-7].s),ptd->typeexpr,*(yyvsp[-5].s),*(yyvsp[-3].s)); + delete (yyvsp[-1].pExpression); + } else { + (yyval.pExpression) = new ExprTypeInfo(tokAt(scanner,(yylsp[-9])),*(yyvsp[-7].s),(yyvsp[-1].pExpression),*(yyvsp[-5].s),*(yyvsp[-3].s)); + } + delete (yyvsp[-7].s); + delete (yyvsp[-5].s); + delete (yyvsp[-3].s); } break; case 381: /* expr_type_info: "typeinfo" name_in_namespace '(' expr ')' */ - { - if ( (yyvsp[-1].pExpression)->rtti_isTypeDecl() ) { - auto ptd = (ExprTypeDecl *)(yyvsp[-1].pExpression); - (yyval.pExpression) = new ExprTypeInfo(tokAt(scanner,(yylsp[-4])),*(yyvsp[-3].s),ptd->typeexpr); - delete (yyvsp[-1].pExpression); - } else { - (yyval.pExpression) = new ExprTypeInfo(tokAt(scanner,(yylsp[-4])),*(yyvsp[-3].s),(yyvsp[-1].pExpression)); - } - delete (yyvsp[-3].s); + { + if ( (yyvsp[-1].pExpression)->rtti_isTypeDecl() ) { + auto ptd = (ExprTypeDecl *)(yyvsp[-1].pExpression); + (yyval.pExpression) = new ExprTypeInfo(tokAt(scanner,(yylsp[-4])),*(yyvsp[-3].s),ptd->typeexpr); + delete (yyvsp[-1].pExpression); + } else { + (yyval.pExpression) = new ExprTypeInfo(tokAt(scanner,(yylsp[-4])),*(yyvsp[-3].s),(yyvsp[-1].pExpression)); + } + delete (yyvsp[-3].s); } break; case 382: /* expr_type_info: "typeinfo" name_in_namespace '<' "name" '>' '(' expr ')' */ - { - if ( (yyvsp[-1].pExpression)->rtti_isTypeDecl() ) { - auto ptd = (ExprTypeDecl *)(yyvsp[-1].pExpression); - (yyval.pExpression) = new ExprTypeInfo(tokAt(scanner,(yylsp[-7])),*(yyvsp[-6].s),ptd->typeexpr,*(yyvsp[-4].s)); - delete (yyvsp[-1].pExpression); - } else { - (yyval.pExpression) = new ExprTypeInfo(tokAt(scanner,(yylsp[-7])),*(yyvsp[-6].s),(yyvsp[-1].pExpression),*(yyvsp[-4].s)); - } - delete (yyvsp[-6].s); - delete (yyvsp[-4].s); + { + if ( (yyvsp[-1].pExpression)->rtti_isTypeDecl() ) { + auto ptd = (ExprTypeDecl *)(yyvsp[-1].pExpression); + (yyval.pExpression) = new ExprTypeInfo(tokAt(scanner,(yylsp[-7])),*(yyvsp[-6].s),ptd->typeexpr,*(yyvsp[-4].s)); + delete (yyvsp[-1].pExpression); + } else { + (yyval.pExpression) = new ExprTypeInfo(tokAt(scanner,(yylsp[-7])),*(yyvsp[-6].s),(yyvsp[-1].pExpression),*(yyvsp[-4].s)); + } + delete (yyvsp[-6].s); + delete (yyvsp[-4].s); } break; case 383: /* expr_type_info: "typeinfo" name_in_namespace '<' "name" semicolon "name" '>' '(' expr ')' */ - { - if ( (yyvsp[-1].pExpression)->rtti_isTypeDecl() ) { - auto ptd = (ExprTypeDecl *)(yyvsp[-1].pExpression); - (yyval.pExpression) = new ExprTypeInfo(tokAt(scanner,(yylsp[-9])),*(yyvsp[-8].s),ptd->typeexpr,*(yyvsp[-6].s),*(yyvsp[-4].s)); - delete (yyvsp[-1].pExpression); - } else { - (yyval.pExpression) = new ExprTypeInfo(tokAt(scanner,(yylsp[-9])),*(yyvsp[-8].s),(yyvsp[-1].pExpression),*(yyvsp[-6].s),*(yyvsp[-4].s)); - } - delete (yyvsp[-8].s); - delete (yyvsp[-6].s); - delete (yyvsp[-4].s); + { + if ( (yyvsp[-1].pExpression)->rtti_isTypeDecl() ) { + auto ptd = (ExprTypeDecl *)(yyvsp[-1].pExpression); + (yyval.pExpression) = new ExprTypeInfo(tokAt(scanner,(yylsp[-9])),*(yyvsp[-8].s),ptd->typeexpr,*(yyvsp[-6].s),*(yyvsp[-4].s)); + delete (yyvsp[-1].pExpression); + } else { + (yyval.pExpression) = new ExprTypeInfo(tokAt(scanner,(yylsp[-9])),*(yyvsp[-8].s),(yyvsp[-1].pExpression),*(yyvsp[-6].s),*(yyvsp[-4].s)); + } + delete (yyvsp[-8].s); + delete (yyvsp[-6].s); + delete (yyvsp[-4].s); } break; case 384: /* expr_list: expr2 */ - { - (yyval.pExpression) = (yyvsp[0].pExpression); + { + (yyval.pExpression) = (yyvsp[0].pExpression); } break; case 385: /* expr_list: expr_list ',' expr2 */ - { - (yyval.pExpression) = new ExprSequence(tokAt(scanner,(yylsp[-2])),(yyvsp[-2].pExpression),(yyvsp[0].pExpression)); + { + (yyval.pExpression) = new ExprSequence(tokAt(scanner,(yylsp[-2])),(yyvsp[-2].pExpression),(yyvsp[0].pExpression)); } break; @@ -8719,23 +8719,23 @@ YYLTYPE yylloc = yyloc_default; break; case 387: /* block_or_simple_block: "=>" expr */ - { - auto retE = new ExprReturn(tokAt(scanner,(yylsp[-1])), (yyvsp[0].pExpression)); - auto blkE = new ExprBlock(); - blkE->at = tokAt(scanner,(yylsp[-1])); - blkE->list.push_back(retE); - (yyval.pExpression) = blkE; + { + auto retE = new ExprReturn(tokAt(scanner,(yylsp[-1])), (yyvsp[0].pExpression)); + auto blkE = new ExprBlock(); + blkE->at = tokAt(scanner,(yylsp[-1])); + blkE->list.push_back(retE); + (yyval.pExpression) = blkE; } break; case 388: /* block_or_simple_block: "=>" "<-" expr */ - { - auto retE = new ExprReturn(tokAt(scanner,(yylsp[-2])), (yyvsp[0].pExpression)); - retE->moveSemantics = true; - auto blkE = new ExprBlock(); - blkE->at = tokAt(scanner,(yylsp[-2])); - blkE->list.push_back(retE); - (yyval.pExpression) = blkE; + { + auto retE = new ExprReturn(tokAt(scanner,(yylsp[-2])), (yyvsp[0].pExpression)); + retE->moveSemantics = true; + auto blkE = new ExprBlock(); + blkE->at = tokAt(scanner,(yylsp[-2])); + blkE->list.push_back(retE); + (yyval.pExpression) = blkE; } break; @@ -8772,18 +8772,18 @@ YYLTYPE yylloc = yyloc_default; break; case 397: /* capture_list: capture_entry */ - { - (yyval.pCaptList) = new vector(); - (yyval.pCaptList)->push_back(*(yyvsp[0].pCapt)); - delete (yyvsp[0].pCapt); + { + (yyval.pCaptList) = new vector(); + (yyval.pCaptList)->push_back(*(yyvsp[0].pCapt)); + delete (yyvsp[0].pCapt); } break; case 398: /* capture_list: capture_list ',' capture_entry */ - { - (yyvsp[-2].pCaptList)->push_back(*(yyvsp[0].pCapt)); - delete (yyvsp[0].pCapt); - (yyval.pCaptList) = (yyvsp[-2].pCaptList); + { + (yyvsp[-2].pCaptList)->push_back(*(yyvsp[0].pCapt)); + delete (yyvsp[0].pCapt); + (yyval.pCaptList) = (yyvsp[-2].pCaptList); } break; @@ -8792,18 +8792,18 @@ YYLTYPE yylloc = yyloc_default; break; case 400: /* optional_capture_list: "[[" capture_list ']' ']' */ - { - if (format::prepare_rule(format::Pos::from(tokAt(scanner, (yylsp[-3]))))) { - format::get_writer() - << "capture(" - << format::substring_between(tokAt(scanner, (yylsp[-3])), tokAt(scanner, (yylsp[-2]))) - << format::get_substring(tokAt(scanner, (yylsp[-2]))) - << format::substring_between(tokAt(scanner, (yylsp[-2])), tokAt(scanner, (yylsp[-1]))) - << ")"; - format::finish_rule(format::Pos::from_last(tokAt(scanner, (yylsp[0])))); - } - - ; (yyval.pCaptList) = (yyvsp[-2].pCaptList); + { + if (format::prepare_rule(format::Pos::from(tokAt(scanner, (yylsp[-3]))))) { + format::get_writer() + << "capture(" + << format::substring_between(tokAt(scanner, (yylsp[-3])), tokAt(scanner, (yylsp[-2]))) + << format::get_substring(tokAt(scanner, (yylsp[-2]))) + << format::substring_between(tokAt(scanner, (yylsp[-2])), tokAt(scanner, (yylsp[-1]))) + << ")"; + format::finish_rule(format::Pos::from_last(tokAt(scanner, (yylsp[0])))); + } + + ; (yyval.pCaptList) = (yyvsp[-2].pCaptList); } break; @@ -8812,27 +8812,27 @@ YYLTYPE yylloc = yyloc_default; break; case 402: /* expr_block: expression_block */ - { - if (format::is_replace_braces() && format::prepare_rule(format::Pos::from(tokAt(scanner, (yylsp[0]))))) { - format::get_writer() << "$() "; - format::finish_rule(format::Pos::from(tokAt(scanner, (yylsp[0])))); - } - - ExprBlock * closure = (ExprBlock *) (yyvsp[0].pExpression); - (yyval.pExpression) = new ExprMakeBlock(tokAt(scanner,(yylsp[0])),(yyvsp[0].pExpression)); - closure->returnType = new TypeDecl(Type::autoinfer); + { + if (format::is_replace_braces() && format::prepare_rule(format::Pos::from(tokAt(scanner, (yylsp[0]))))) { + format::get_writer() << "$() "; + format::finish_rule(format::Pos::from(tokAt(scanner, (yylsp[0])))); + } + + ExprBlock * closure = (ExprBlock *) (yyvsp[0].pExpression); + (yyval.pExpression) = new ExprMakeBlock(tokAt(scanner,(yylsp[0])),(yyvsp[0].pExpression)); + closure->returnType = new TypeDecl(Type::autoinfer); } break; case 403: /* expr_block: block_or_lambda optional_annotation_list optional_capture_list optional_function_argument_list optional_function_type block_or_simple_block */ - { - (yyval.pExpression) = ast_makeBlock(scanner,(yyvsp[-5].i),(yyvsp[-4].faList),(yyvsp[-3].pCaptList),(yyvsp[-2].pVarDeclList),(yyvsp[-1].pTypeDecl),(yyvsp[0].pExpression),tokAt(scanner,(yylsp[0])),tokAt(scanner,(yylsp[-4])),tokAt(scanner,(yylsp[-3]))); + { + (yyval.pExpression) = ast_makeBlock(scanner,(yyvsp[-5].i),(yyvsp[-4].faList),(yyvsp[-3].pCaptList),(yyvsp[-2].pVarDeclList),(yyvsp[-1].pTypeDecl),(yyvsp[0].pExpression),tokAt(scanner,(yylsp[0])),tokAt(scanner,(yylsp[-4])),tokAt(scanner,(yylsp[-3]))); } break; case 404: /* expr_full_block: block_or_lambda optional_annotation_list optional_capture_list optional_function_argument_list optional_function_type block_or_simple_block */ - { - (yyval.pExpression) = ast_makeBlock(scanner,(yyvsp[-5].i),(yyvsp[-4].faList),(yyvsp[-3].pCaptList),(yyvsp[-2].pVarDeclList),(yyvsp[-1].pTypeDecl),(yyvsp[0].pExpression),tokAt(scanner,(yylsp[0])),tokAt(scanner,(yylsp[-4])),tokAt(scanner,(yylsp[-3]))); + { + (yyval.pExpression) = ast_makeBlock(scanner,(yyvsp[-5].i),(yyvsp[-4].faList),(yyvsp[-3].pCaptList),(yyvsp[-2].pVarDeclList),(yyvsp[-1].pTypeDecl),(yyvsp[0].pExpression),tokAt(scanner,(yylsp[0])),tokAt(scanner,(yylsp[-4])),tokAt(scanner,(yylsp[-3]))); } break; @@ -8841,8 +8841,8 @@ YYLTYPE yylloc = yyloc_default; break; case 406: /* expr_full_block_assumed_piped: block_or_lambda $@24 optional_annotation_list optional_capture_list optional_function_argument_list optional_function_type expression_block */ - { - (yyval.pExpression) = ast_makeBlock(scanner,(yyvsp[-6].i),(yyvsp[-4].faList),(yyvsp[-3].pCaptList),(yyvsp[-2].pVarDeclList),(yyvsp[-1].pTypeDecl),(yyvsp[0].pExpression),tokAt(scanner,(yylsp[0])),tokAt(scanner,(yylsp[-4])),tokAt(scanner,(yylsp[-3]))); + { + (yyval.pExpression) = ast_makeBlock(scanner,(yyvsp[-6].i),(yyvsp[-4].faList),(yyvsp[-3].pCaptList),(yyvsp[-2].pVarDeclList),(yyvsp[-1].pTypeDecl),(yyvsp[0].pExpression),tokAt(scanner,(yylsp[0])),tokAt(scanner,(yylsp[-4])),tokAt(scanner,(yylsp[-3]))); } break; @@ -8951,39 +8951,39 @@ YYLTYPE yylloc = yyloc_default; break; case 433: /* expr_assign_pipe_right: "@ <|" expr_block */ - { - if (format::is_replace_braces() && format::prepare_rule(format::Pos::from(tokAt(scanner, (yylsp[-1]))))) { - auto tok = tokAt(scanner, (yylsp[0])); - tok.column += 1; - format::get_writer() << "@" << format::get_substring(tok) << ";"; - format::finish_rule(format::Pos::from_last(tok)); - } - - (yyval.pExpression) = (yyvsp[0].pExpression); + { + if (format::is_replace_braces() && format::prepare_rule(format::Pos::from(tokAt(scanner, (yylsp[-1]))))) { + auto tok = tokAt(scanner, (yylsp[0])); + tok.column += 1; + format::get_writer() << "@" << format::get_substring(tok) << ";"; + format::finish_rule(format::Pos::from_last(tok)); + } + + (yyval.pExpression) = (yyvsp[0].pExpression); } break; case 434: /* expr_assign_pipe_right: "@@ <|" expr_block */ - { - if (format::is_replace_braces() && format::prepare_rule(format::Pos::from(tokAt(scanner, (yylsp[-1]))))) { - auto tok = tokAt(scanner, (yylsp[0])); - tok.column += 1; - format::get_writer() << "@@" << format::get_substring(tok) << ";"; - format::finish_rule(format::Pos::from_last(tok)); - } - (yyval.pExpression) = (yyvsp[0].pExpression); + { + if (format::is_replace_braces() && format::prepare_rule(format::Pos::from(tokAt(scanner, (yylsp[-1]))))) { + auto tok = tokAt(scanner, (yylsp[0])); + tok.column += 1; + format::get_writer() << "@@" << format::get_substring(tok) << ";"; + format::finish_rule(format::Pos::from_last(tok)); + } + (yyval.pExpression) = (yyvsp[0].pExpression); } break; case 435: /* expr_assign_pipe_right: "$ <|" expr_block */ - { - if (format::is_replace_braces() && format::prepare_rule(format::Pos::from(tokAt(scanner, (yylsp[-1]))))) { - auto tok = tokAt(scanner, (yylsp[0])); - tok.column += 1; - format::get_writer() << "$" << format::get_substring(tok) << ";"; - format::finish_rule(format::Pos::from_last(tok)); - } - (yyval.pExpression) = (yyvsp[0].pExpression); + { + if (format::is_replace_braces() && format::prepare_rule(format::Pos::from(tokAt(scanner, (yylsp[-1]))))) { + auto tok = tokAt(scanner, (yylsp[0])); + tok.column += 1; + format::get_writer() << "$" << format::get_substring(tok) << ";"; + format::finish_rule(format::Pos::from_last(tok)); + } + (yyval.pExpression) = (yyvsp[0].pExpression); } break; @@ -9060,59 +9060,59 @@ YYLTYPE yylloc = yyloc_default; break; case 454: /* expr_named_call: name_in_namespace '(' '[' make_struct_fields ']' ')' */ - { - auto nc = new ExprNamedCall(tokAt(scanner,(yylsp[-5])),*(yyvsp[-5].s)); - nc->arguments = (yyvsp[-2].pMakeStruct); - delete (yyvsp[-5].s); - (yyval.pExpression) = nc; + { + auto nc = new ExprNamedCall(tokAt(scanner,(yylsp[-5])),*(yyvsp[-5].s)); + nc->arguments = (yyvsp[-2].pMakeStruct); + delete (yyvsp[-5].s); + (yyval.pExpression) = nc; } break; case 455: /* expr_named_call: name_in_namespace '(' expr_list ',' '[' make_struct_fields ']' ')' */ - { - auto nc = new ExprNamedCall(tokAt(scanner,(yylsp[-7])),*(yyvsp[-7].s)); - nc->nonNamedArguments = sequenceToList((yyvsp[-5].pExpression)); - nc->arguments = (yyvsp[-2].pMakeStruct); - delete (yyvsp[-7].s); - (yyval.pExpression) = nc; + { + auto nc = new ExprNamedCall(tokAt(scanner,(yylsp[-7])),*(yyvsp[-7].s)); + nc->nonNamedArguments = sequenceToList((yyvsp[-5].pExpression)); + nc->arguments = (yyvsp[-2].pMakeStruct); + delete (yyvsp[-7].s); + (yyval.pExpression) = nc; } break; case 456: /* expr_method_call: expr2 "->" "name" '(' ')' */ - { - auto pInvoke = makeInvokeMethod(tokAt(scanner,(yylsp[-3])), (yyvsp[-4].pExpression), *(yyvsp[-2].s)); - delete (yyvsp[-2].s); - (yyval.pExpression) = pInvoke; + { + auto pInvoke = makeInvokeMethod(tokAt(scanner,(yylsp[-3])), (yyvsp[-4].pExpression), *(yyvsp[-2].s)); + delete (yyvsp[-2].s); + (yyval.pExpression) = pInvoke; } break; case 457: /* expr_method_call: expr2 "->" "name" '(' expr_list ')' */ - { - auto pInvoke = makeInvokeMethod(tokAt(scanner,(yylsp[-4])), (yyvsp[-5].pExpression), *(yyvsp[-3].s)); - auto callArgs = sequenceToList((yyvsp[-1].pExpression)); - pInvoke->arguments.insert ( pInvoke->arguments.end(), callArgs.begin(), callArgs.end() ); - delete (yyvsp[-3].s); - (yyval.pExpression) = pInvoke; + { + auto pInvoke = makeInvokeMethod(tokAt(scanner,(yylsp[-4])), (yyvsp[-5].pExpression), *(yyvsp[-3].s)); + auto callArgs = sequenceToList((yyvsp[-1].pExpression)); + pInvoke->arguments.insert ( pInvoke->arguments.end(), callArgs.begin(), callArgs.end() ); + delete (yyvsp[-3].s); + (yyval.pExpression) = pInvoke; } break; case 458: /* func_addr_name: name_in_namespace */ - { - (yyval.pExpression) = new ExprAddr(tokAt(scanner,(yylsp[0])),*(yyvsp[0].s)); - delete (yyvsp[0].s); + { + (yyval.pExpression) = new ExprAddr(tokAt(scanner,(yylsp[0])),*(yyvsp[0].s)); + delete (yyvsp[0].s); } break; case 459: /* func_addr_name: "$i" '(' expr2 ')' */ - { - auto expr = new ExprAddr(tokAt(scanner,(yylsp[-3])),"``MACRO``TAG``ADDR``"); - (yyval.pExpression) = new ExprTag(tokAt(scanner,(yylsp[-1])),(yyvsp[-1].pExpression), expr, "i"); + { + auto expr = new ExprAddr(tokAt(scanner,(yylsp[-3])),"``MACRO``TAG``ADDR``"); + (yyval.pExpression) = new ExprTag(tokAt(scanner,(yylsp[-1])),(yyvsp[-1].pExpression), expr, "i"); } break; case 460: /* func_addr_expr: '@' '@' func_addr_name */ - { - (yyval.pExpression) = (yyvsp[0].pExpression); + { + (yyval.pExpression) = (yyvsp[0].pExpression); } break; @@ -9125,10 +9125,10 @@ YYLTYPE yylloc = yyloc_default; break; case 463: /* func_addr_expr: '@' '@' '<' $@25 type_declaration_no_options '>' $@26 func_addr_name */ - { - auto expr = (ExprAddr *) ((yyvsp[0].pExpression)->rtti_isAddr() ? (yyvsp[0].pExpression) : (((ExprTag *) (yyvsp[0].pExpression))->value)); - expr->funcType = (yyvsp[-3].pTypeDecl); - (yyval.pExpression) = (yyvsp[0].pExpression); + { + auto expr = (ExprAddr *) ((yyvsp[0].pExpression)->rtti_isAddr() ? (yyvsp[0].pExpression) : (((ExprTag *) (yyvsp[0].pExpression))->value)); + expr->funcType = (yyvsp[-3].pTypeDecl); + (yyval.pExpression) = (yyvsp[0].pExpression); } break; @@ -9141,76 +9141,76 @@ YYLTYPE yylloc = yyloc_default; break; case 466: /* func_addr_expr: '@' '@' '<' $@27 optional_function_argument_list optional_function_type '>' $@28 func_addr_name */ - { - auto expr = (ExprAddr *) ((yyvsp[0].pExpression)->rtti_isAddr() ? (yyvsp[0].pExpression) : (((ExprTag *) (yyvsp[0].pExpression))->value)); - expr->funcType = new TypeDecl(Type::tFunction); - expr->funcType->firstType = (yyvsp[-3].pTypeDecl); - if ( (yyvsp[-4].pVarDeclList) ) { - varDeclToTypeDecl(scanner, expr->funcType, (yyvsp[-4].pVarDeclList)); - deleteVariableDeclarationList((yyvsp[-4].pVarDeclList)); - } - (yyval.pExpression) = (yyvsp[0].pExpression); + { + auto expr = (ExprAddr *) ((yyvsp[0].pExpression)->rtti_isAddr() ? (yyvsp[0].pExpression) : (((ExprTag *) (yyvsp[0].pExpression))->value)); + expr->funcType = new TypeDecl(Type::tFunction); + expr->funcType->firstType = (yyvsp[-3].pTypeDecl); + if ( (yyvsp[-4].pVarDeclList) ) { + varDeclToTypeDecl(scanner, expr->funcType, (yyvsp[-4].pVarDeclList)); + deleteVariableDeclarationList((yyvsp[-4].pVarDeclList)); + } + (yyval.pExpression) = (yyvsp[0].pExpression); } break; case 467: /* expr_field: expr2 '.' "name" */ - { - (yyval.pExpression) = new ExprField(tokAt(scanner,(yylsp[-1])), tokAt(scanner,(yylsp[0])), (yyvsp[-2].pExpression), *(yyvsp[0].s)); - delete (yyvsp[0].s); + { + (yyval.pExpression) = new ExprField(tokAt(scanner,(yylsp[-1])), tokAt(scanner,(yylsp[0])), (yyvsp[-2].pExpression), *(yyvsp[0].s)); + delete (yyvsp[0].s); } break; case 468: /* expr_field: expr2 '.' '.' "name" */ - { - (yyval.pExpression) = new ExprField(tokAt(scanner,(yylsp[-1])), tokAt(scanner,(yylsp[0])), (yyvsp[-3].pExpression), *(yyvsp[0].s), true); - delete (yyvsp[0].s); + { + (yyval.pExpression) = new ExprField(tokAt(scanner,(yylsp[-1])), tokAt(scanner,(yylsp[0])), (yyvsp[-3].pExpression), *(yyvsp[0].s), true); + delete (yyvsp[0].s); } break; case 469: /* expr_field: expr2 '.' "name" '(' ')' */ - { - auto pInvoke = makeInvokeMethod(tokAt(scanner,(yylsp[-3])), (yyvsp[-4].pExpression), *(yyvsp[-2].s)); - delete (yyvsp[-2].s); - (yyval.pExpression) = pInvoke; + { + auto pInvoke = makeInvokeMethod(tokAt(scanner,(yylsp[-3])), (yyvsp[-4].pExpression), *(yyvsp[-2].s)); + delete (yyvsp[-2].s); + (yyval.pExpression) = pInvoke; } break; case 470: /* expr_field: expr2 '.' "name" '(' expr_list ')' */ - { - auto pInvoke = makeInvokeMethod(tokAt(scanner,(yylsp[-4])), (yyvsp[-5].pExpression), *(yyvsp[-3].s)); - auto callArgs = sequenceToList((yyvsp[-1].pExpression)); - pInvoke->arguments.insert ( pInvoke->arguments.end(), callArgs.begin(), callArgs.end() ); - delete (yyvsp[-3].s); - (yyval.pExpression) = pInvoke; + { + auto pInvoke = makeInvokeMethod(tokAt(scanner,(yylsp[-4])), (yyvsp[-5].pExpression), *(yyvsp[-3].s)); + auto callArgs = sequenceToList((yyvsp[-1].pExpression)); + pInvoke->arguments.insert ( pInvoke->arguments.end(), callArgs.begin(), callArgs.end() ); + delete (yyvsp[-3].s); + (yyval.pExpression) = pInvoke; } break; case 471: /* expr_field: expr2 '.' "name" '(' '[' make_struct_fields ']' ')' */ - { - auto nc = new ExprNamedCall(tokAt(scanner,(yylsp[-5])),*(yyvsp[-5].s)); - nc->methodCall = true; - nc->arguments = (yyvsp[-2].pMakeStruct); - nc->nonNamedArguments.push_back((yyvsp[-7].pExpression)); - delete (yyvsp[-5].s); - (yyval.pExpression) = nc; + { + auto nc = new ExprNamedCall(tokAt(scanner,(yylsp[-5])),*(yyvsp[-5].s)); + nc->methodCall = true; + nc->arguments = (yyvsp[-2].pMakeStruct); + nc->nonNamedArguments.push_back((yyvsp[-7].pExpression)); + delete (yyvsp[-5].s); + (yyval.pExpression) = nc; } break; case 472: /* expr_field: expr2 '.' basic_type_declaration '(' ')' */ - { - auto method_name = das_to_string((yyvsp[-2].type)); - auto pInvoke = makeInvokeMethod(tokAt(scanner,(yylsp[-3])), (yyvsp[-4].pExpression), method_name); - (yyval.pExpression) = pInvoke; + { + auto method_name = das_to_string((yyvsp[-2].type)); + auto pInvoke = makeInvokeMethod(tokAt(scanner,(yylsp[-3])), (yyvsp[-4].pExpression), method_name); + (yyval.pExpression) = pInvoke; } break; case 473: /* expr_field: expr2 '.' basic_type_declaration '(' expr_list ')' */ - { - auto method_name = das_to_string((yyvsp[-3].type)); - auto pInvoke = makeInvokeMethod(tokAt(scanner,(yylsp[-4])), (yyvsp[-5].pExpression), method_name); - auto callArgs = sequenceToList((yyvsp[-1].pExpression)); - pInvoke->arguments.insert ( pInvoke->arguments.end(), callArgs.begin(), callArgs.end() ); - (yyval.pExpression) = pInvoke; + { + auto method_name = das_to_string((yyvsp[-3].type)); + auto pInvoke = makeInvokeMethod(tokAt(scanner,(yylsp[-4])), (yyvsp[-5].pExpression), method_name); + auto callArgs = sequenceToList((yyvsp[-1].pExpression)); + pInvoke->arguments.insert ( pInvoke->arguments.end(), callArgs.begin(), callArgs.end() ); + (yyval.pExpression) = pInvoke; } break; @@ -9223,72 +9223,72 @@ YYLTYPE yylloc = yyloc_default; break; case 476: /* expr_field: expr2 '.' $@29 error $@30 */ - { - (yyval.pExpression) = new ExprField(tokAt(scanner,(yylsp[-3])), tokAt(scanner,(yylsp[-3])), (yyvsp[-4].pExpression), ""); - yyerrok; + { + (yyval.pExpression) = new ExprField(tokAt(scanner,(yylsp[-3])), tokAt(scanner,(yylsp[-3])), (yyvsp[-4].pExpression), ""); + yyerrok; } break; case 477: /* expr_call: name_in_namespace '(' ')' */ - { - (yyval.pExpression) = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-2])),tokAt(scanner,(yylsp[0])),*(yyvsp[-2].s)); - delete (yyvsp[-2].s); + { + (yyval.pExpression) = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-2])),tokAt(scanner,(yylsp[0])),*(yyvsp[-2].s)); + delete (yyvsp[-2].s); } break; case 478: /* expr_call: name_in_namespace '(' "uninitialized" ')' */ - { - auto dd = new ExprMakeStruct(tokAt(scanner,(yylsp[-3]))); - dd->at = tokAt(scanner,(yylsp[-3])); - dd->makeType = new TypeDecl(Type::alias); - dd->makeType->alias = *(yyvsp[-3].s); - dd->useInitializer = false; - dd->alwaysUseInitializer = true; - delete (yyvsp[-3].s); - (yyval.pExpression) = dd; + { + auto dd = new ExprMakeStruct(tokAt(scanner,(yylsp[-3]))); + dd->at = tokAt(scanner,(yylsp[-3])); + dd->makeType = new TypeDecl(Type::alias); + dd->makeType->alias = *(yyvsp[-3].s); + dd->useInitializer = false; + dd->alwaysUseInitializer = true; + delete (yyvsp[-3].s); + (yyval.pExpression) = dd; } break; case 479: /* expr_call: name_in_namespace '(' make_struct_single ')' */ - { - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->at = tokAt(scanner,(yylsp[-3])); - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->makeType = new TypeDecl(Type::alias); - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->makeType->alias = *(yyvsp[-3].s); - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->useInitializer = true; - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->alwaysUseInitializer = true; - delete (yyvsp[-3].s); - (yyval.pExpression) = (yyvsp[-1].pExpression); + { + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->at = tokAt(scanner,(yylsp[-3])); + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->makeType = new TypeDecl(Type::alias); + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->makeType->alias = *(yyvsp[-3].s); + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->useInitializer = true; + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->alwaysUseInitializer = true; + delete (yyvsp[-3].s); + (yyval.pExpression) = (yyvsp[-1].pExpression); } break; case 480: /* expr_call: name_in_namespace '(' "uninitialized" make_struct_single ')' */ - { - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->at = tokAt(scanner,(yylsp[-4])); - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->makeType = new TypeDecl(Type::alias); - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->makeType->alias = *(yyvsp[-4].s); - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->useInitializer = false; - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->alwaysUseInitializer = true; - delete (yyvsp[-4].s); - (yyval.pExpression) = (yyvsp[-1].pExpression); + { + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->at = tokAt(scanner,(yylsp[-4])); + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->makeType = new TypeDecl(Type::alias); + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->makeType->alias = *(yyvsp[-4].s); + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->useInitializer = false; + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->alwaysUseInitializer = true; + delete (yyvsp[-4].s); + (yyval.pExpression) = (yyvsp[-1].pExpression); } break; case 481: /* expr_call: name_in_namespace '(' expr_list ')' */ - { - (yyval.pExpression) = parseFunctionArguments(yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-3])),tokAt(scanner,(yylsp[0])),*(yyvsp[-3].s)),(yyvsp[-1].pExpression)); - delete (yyvsp[-3].s); + { + (yyval.pExpression) = parseFunctionArguments(yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-3])),tokAt(scanner,(yylsp[0])),*(yyvsp[-3].s)),(yyvsp[-1].pExpression)); + delete (yyvsp[-3].s); } break; case 482: /* expr_call: basic_type_declaration '(' ')' */ - { - (yyval.pExpression) = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-2])),tokAt(scanner,(yylsp[0])),das_to_string((yyvsp[-2].type))); + { + (yyval.pExpression) = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-2])),tokAt(scanner,(yylsp[0])),das_to_string((yyvsp[-2].type))); } break; case 483: /* expr_call: basic_type_declaration '(' expr_list ')' */ - { - (yyval.pExpression) = parseFunctionArguments(yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-3])),tokAt(scanner,(yylsp[0])),das_to_string((yyvsp[-3].type))),(yyvsp[-1].pExpression)); + { + (yyval.pExpression) = parseFunctionArguments(yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-3])),tokAt(scanner,(yylsp[0])),das_to_string((yyvsp[-3].type))),(yyvsp[-1].pExpression)); } break; @@ -9405,12 +9405,12 @@ YYLTYPE yylloc = yyloc_default; break; case 512: /* expr2: expr2 ".." expr2 */ - { - need_wrap_current_expr = true; - auto itv = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-1])),"interval"); - itv->arguments.push_back((yyvsp[-2].pExpression)); - itv->arguments.push_back((yyvsp[0].pExpression)); - (yyval.pExpression) = itv; + { + need_wrap_current_expr = true; + auto itv = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-1])),"interval"); + itv->arguments.push_back((yyvsp[-2].pExpression)); + itv->arguments.push_back((yyvsp[0].pExpression)); + (yyval.pExpression) = itv; } break; @@ -9459,8 +9459,8 @@ YYLTYPE yylloc = yyloc_default; break; case 524: /* expr2: expr2 '?' expr2 ':' expr2 */ - { - need_wrap_current_expr = true; (yyval.pExpression) = new ExprOp3(tokRangeAt(scanner,(yylsp[-4]), (yylsp[0])),"?",(yyvsp[-4].pExpression),(yyvsp[-2].pExpression),(yyvsp[0].pExpression)); + { + need_wrap_current_expr = true; (yyval.pExpression) = new ExprOp3(tokRangeAt(scanner,(yylsp[-4]), (yylsp[0])),"?",(yyvsp[-4].pExpression),(yyvsp[-2].pExpression),(yyvsp[0].pExpression)); } break; @@ -9493,19 +9493,21 @@ YYLTYPE yylloc = yyloc_default; break; case 532: /* expr2: '(' expr_list optional_comma ')' */ - { - if ( (yyvsp[-2].pExpression)->rtti_isSequence() ) { - auto mkt = new ExprMakeTuple(tokAt(scanner,(yylsp[-2]))); - mkt->values = sequenceToList((yyvsp[-2].pExpression)); - (yyval.pExpression) = mkt; - } else if ( (yyvsp[-1].b) ) { - auto mkt = new ExprMakeTuple(tokAt(scanner,(yylsp[-2]))); - mkt->values.push_back((yyvsp[-2].pExpression)); - (yyval.pExpression) = mkt; - } else { - (yyvsp[-2].pExpression)->at = tokAt(scanner, (yylsp[-2])); - (yyval.pExpression) = (yyvsp[-2].pExpression); - } + { + if ( (yyvsp[-2].pExpression)->rtti_isSequence() ) { + auto mkt = new ExprMakeTuple(tokAt(scanner,(yylsp[-2]))); + mkt->values = sequenceToList((yyvsp[-2].pExpression)); + mkt->shorthandRecordNames = ast_tupleCollectShorthandNames(mkt->values); + (yyval.pExpression) = mkt; + } else if ( (yyvsp[-1].b) ) { + auto mkt = new ExprMakeTuple(tokAt(scanner,(yylsp[-2]))); + mkt->values.push_back((yyvsp[-2].pExpression)); + mkt->shorthandRecordNames = ast_tupleCollectShorthandNames(mkt->values); + (yyval.pExpression) = mkt; + } else { + (yyvsp[-2].pExpression)->at = tokAt(scanner, (yylsp[-2])); + (yyval.pExpression) = (yyvsp[-2].pExpression); + } } break; @@ -9526,14 +9528,14 @@ YYLTYPE yylloc = yyloc_default; break; case 537: /* expr2: "generator" '<' type_declaration_no_options '>' optional_capture_list '(' ')' */ - { - (yyval.pExpression) = ast_makeGenerator(scanner,(yyvsp[-4].pTypeDecl),(yyvsp[-2].pCaptList),nullptr,tokAt(scanner,(yylsp[-6])),tokAt(scanner,(yylsp[-2]))); + { + (yyval.pExpression) = ast_makeGenerator(scanner,(yyvsp[-4].pTypeDecl),(yyvsp[-2].pCaptList),nullptr,tokAt(scanner,(yylsp[-6])),tokAt(scanner,(yylsp[-2]))); } break; case 538: /* expr2: "generator" '<' type_declaration_no_options '>' optional_capture_list '(' expr2 ')' */ - { - (yyval.pExpression) = ast_makeGenerator(scanner,(yyvsp[-5].pTypeDecl),(yyvsp[-3].pCaptList),(yyvsp[-1].pExpression),tokAt(scanner,(yylsp[-7])),tokAt(scanner,(yylsp[-3]))); + { + (yyval.pExpression) = ast_makeGenerator(scanner,(yyvsp[-5].pTypeDecl),(yyvsp[-3].pCaptList),(yyvsp[-1].pExpression),tokAt(scanner,(yylsp[-7])),tokAt(scanner,(yylsp[-3]))); } break; @@ -9550,30 +9552,30 @@ YYLTYPE yylloc = yyloc_default; break; case 542: /* expr2: expr2 "is" "type" '<' $@31 type_declaration_no_options '>' $@32 */ - { - (yyval.pExpression) = new ExprIs(tokRangeAt(scanner,(yylsp[-7]), (yylsp[-1])),(yyvsp[-7].pExpression),(yyvsp[-2].pTypeDecl)); + { + (yyval.pExpression) = new ExprIs(tokRangeAt(scanner,(yylsp[-7]), (yylsp[-1])),(yyvsp[-7].pExpression),(yyvsp[-2].pTypeDecl)); } break; case 543: /* expr2: expr2 "is" basic_type_declaration */ - { - auto vdecl = new TypeDecl((yyvsp[0].type)); - vdecl->at = tokAt(scanner,(yylsp[0])); - (yyval.pExpression) = new ExprIs(tokRangeAt(scanner,(yylsp[-2]),(yylsp[0])),(yyvsp[-2].pExpression),vdecl); + { + auto vdecl = new TypeDecl((yyvsp[0].type)); + vdecl->at = tokAt(scanner,(yylsp[0])); + (yyval.pExpression) = new ExprIs(tokRangeAt(scanner,(yylsp[-2]),(yylsp[0])),(yyvsp[-2].pExpression),vdecl); } break; case 544: /* expr2: expr2 "is" "name" */ - { - (yyval.pExpression) = new ExprIsVariant(tokRangeAt(scanner,(yylsp[-2]), (yylsp[0])),(yyvsp[-2].pExpression),*(yyvsp[0].s)); - delete (yyvsp[0].s); + { + (yyval.pExpression) = new ExprIsVariant(tokRangeAt(scanner,(yylsp[-2]), (yylsp[0])),(yyvsp[-2].pExpression),*(yyvsp[0].s)); + delete (yyvsp[0].s); } break; case 545: /* expr2: expr2 "as" "name" */ - { - (yyval.pExpression) = new ExprAsVariant(tokRangeAt(scanner,(yylsp[-2]), (yylsp[0])),(yyvsp[-2].pExpression),*(yyvsp[0].s)); - delete (yyvsp[0].s); + { + (yyval.pExpression) = new ExprAsVariant(tokRangeAt(scanner,(yylsp[-2]), (yylsp[0])),(yyvsp[-2].pExpression),*(yyvsp[0].s)); + delete (yyvsp[0].s); } break; @@ -9586,23 +9588,23 @@ YYLTYPE yylloc = yyloc_default; break; case 548: /* expr2: expr2 "as" "type" '<' $@33 type_declaration '>' $@34 */ - { - auto vname = (yyvsp[-2].pTypeDecl)->describe(); - (yyval.pExpression) = new ExprAsVariant(tokRangeAt(scanner,(yylsp[-7]), (yylsp[-1])),(yyvsp[-7].pExpression),vname); - delete (yyvsp[-2].pTypeDecl); + { + auto vname = (yyvsp[-2].pTypeDecl)->describe(); + (yyval.pExpression) = new ExprAsVariant(tokRangeAt(scanner,(yylsp[-7]), (yylsp[-1])),(yyvsp[-7].pExpression),vname); + delete (yyvsp[-2].pTypeDecl); } break; case 549: /* expr2: expr2 "as" basic_type_declaration */ - { - (yyval.pExpression) = new ExprAsVariant(tokRangeAt(scanner,(yylsp[-2]), (yylsp[0])),(yyvsp[-2].pExpression),das_to_string((yyvsp[0].type))); + { + (yyval.pExpression) = new ExprAsVariant(tokRangeAt(scanner,(yylsp[-2]), (yylsp[0])),(yyvsp[-2].pExpression),das_to_string((yyvsp[0].type))); } break; case 550: /* expr2: expr2 '?' "as" "name" */ - { - (yyval.pExpression) = new ExprSafeAsVariant(tokRangeAt(scanner,(yylsp[-3]), (yylsp[0])),(yyvsp[-3].pExpression),*(yyvsp[0].s)); - delete (yyvsp[0].s); + { + (yyval.pExpression) = new ExprSafeAsVariant(tokRangeAt(scanner,(yylsp[-3]), (yylsp[0])),(yyvsp[-3].pExpression),*(yyvsp[0].s)); + delete (yyvsp[0].s); } break; @@ -9615,16 +9617,16 @@ YYLTYPE yylloc = yyloc_default; break; case 553: /* expr2: expr2 '?' "as" "type" '<' $@35 type_declaration '>' $@36 */ - { - auto vname = (yyvsp[-2].pTypeDecl)->describe(); - (yyval.pExpression) = new ExprSafeAsVariant(tokRangeAt(scanner,(yylsp[-8]), (yylsp[-1])),(yyvsp[-8].pExpression),vname); - delete (yyvsp[-2].pTypeDecl); + { + auto vname = (yyvsp[-2].pTypeDecl)->describe(); + (yyval.pExpression) = new ExprSafeAsVariant(tokRangeAt(scanner,(yylsp[-8]), (yylsp[-1])),(yyvsp[-8].pExpression),vname); + delete (yyvsp[-2].pTypeDecl); } break; case 554: /* expr2: expr2 '?' "as" basic_type_declaration */ - { - (yyval.pExpression) = new ExprSafeAsVariant(tokRangeAt(scanner,(yylsp[-3]), (yylsp[0])),(yyvsp[-3].pExpression),das_to_string((yyvsp[0].type))); + { + (yyval.pExpression) = new ExprSafeAsVariant(tokRangeAt(scanner,(yylsp[-3]), (yylsp[0])),(yyvsp[-3].pExpression),das_to_string((yyvsp[0].type))); } break; @@ -9665,28 +9667,28 @@ YYLTYPE yylloc = yyloc_default; break; case 564: /* expr2: expr2 "|>" basic_type_declaration */ - { - auto fncall = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[0])),tokAt(scanner,(yylsp[0])),das_to_string((yyvsp[0].type))); - (yyval.pExpression) = ast_rpipe(scanner,(yyvsp[-2].pExpression),fncall,tokRangeAt(scanner,(yylsp[-2]), (yylsp[0]))); + { + auto fncall = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[0])),tokAt(scanner,(yylsp[0])),das_to_string((yyvsp[0].type))); + (yyval.pExpression) = ast_rpipe(scanner,(yyvsp[-2].pExpression),fncall,tokRangeAt(scanner,(yylsp[-2]), (yylsp[0]))); } break; case 565: /* expr2: name_in_namespace "name" */ - { - if (format::prepare_rule(format::Pos::from_last(tokAt(scanner,(yylsp[-1]))))) { - format::get_writer() << "." << format::get_substring(tokAt(scanner,(yylsp[0]))); - format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); - } - - (yyval.pExpression) = ast_NameName(scanner,(yyvsp[-1].s),(yyvsp[0].s),tokRangeAt(scanner,(yylsp[-1]),(yylsp[0])),tokAt(scanner,(yylsp[0]))); + { + if (format::prepare_rule(format::Pos::from_last(tokAt(scanner,(yylsp[-1]))))) { + format::get_writer() << "." << format::get_substring(tokAt(scanner,(yylsp[0]))); + format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); + } + + (yyval.pExpression) = ast_NameName(scanner,(yyvsp[-1].s),(yyvsp[0].s),tokRangeAt(scanner,(yylsp[-1]),(yylsp[0])),tokAt(scanner,(yylsp[0]))); } break; case 566: /* expr2: "unsafe" '(' expr2 ')' */ - { - (yyvsp[-1].pExpression)->alwaysSafe = true; - (yyvsp[-1].pExpression)->userSaidItsSafe = true; - (yyval.pExpression) = (yyvsp[-1].pExpression); + { + (yyvsp[-1].pExpression)->alwaysSafe = true; + (yyvsp[-1].pExpression)->userSaidItsSafe = true; + (yyval.pExpression) = (yyvsp[-1].pExpression); } break; @@ -9695,12 +9697,12 @@ YYLTYPE yylloc = yyloc_default; break; case 568: /* expr: expr2 */ - { - if (need_wrap_current_expr) { - format::wrap_par_expr_newline(tokAt(scanner,(yylsp[0])), (yyvsp[0].pExpression)->at); - need_wrap_current_expr = false; - } - (yyval.pExpression) = (yyvsp[0].pExpression); + { + if (need_wrap_current_expr) { + format::wrap_par_expr_newline(tokAt(scanner,(yylsp[0])), (yyvsp[0].pExpression)->at); + need_wrap_current_expr = false; + } + (yyval.pExpression) = (yyvsp[0].pExpression); } break; @@ -9729,72 +9731,72 @@ YYLTYPE yylloc = yyloc_default; break; case 575: /* expr_mtag: "$c" '(' expr2 ')' '(' ')' */ - { - auto ccall = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-5])),tokAt(scanner,(yylsp[0])),"``MACRO``TAG``CALL``"); - (yyval.pExpression) = new ExprTag(tokAt(scanner,(yylsp[-5])),(yyvsp[-3].pExpression),ccall,"c"); + { + auto ccall = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-5])),tokAt(scanner,(yylsp[0])),"``MACRO``TAG``CALL``"); + (yyval.pExpression) = new ExprTag(tokAt(scanner,(yylsp[-5])),(yyvsp[-3].pExpression),ccall,"c"); } break; case 576: /* expr_mtag: "$c" '(' expr2 ')' '(' expr_list ')' */ - { - auto ccall = parseFunctionArguments(yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-6])),tokAt(scanner,(yylsp[0])),"``MACRO``TAG``CALL``"),(yyvsp[-1].pExpression)); - (yyval.pExpression) = new ExprTag(tokAt(scanner,(yylsp[-6])),(yyvsp[-4].pExpression),ccall,"c"); + { + auto ccall = parseFunctionArguments(yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-6])),tokAt(scanner,(yylsp[0])),"``MACRO``TAG``CALL``"),(yyvsp[-1].pExpression)); + (yyval.pExpression) = new ExprTag(tokAt(scanner,(yylsp[-6])),(yyvsp[-4].pExpression),ccall,"c"); } break; case 577: /* expr_mtag: expr2 '.' "$f" '(' expr2 ')' */ - { - auto cfield = new ExprField(tokAt(scanner,(yylsp[-4])), tokAt(scanner,(yylsp[-1])), (yyvsp[-5].pExpression), "``MACRO``TAG``FIELD``"); - (yyval.pExpression) = new ExprTag(tokAt(scanner,(yylsp[-1])),(yyvsp[-1].pExpression),cfield,"f"); + { + auto cfield = new ExprField(tokAt(scanner,(yylsp[-4])), tokAt(scanner,(yylsp[-1])), (yyvsp[-5].pExpression), "``MACRO``TAG``FIELD``"); + (yyval.pExpression) = new ExprTag(tokAt(scanner,(yylsp[-1])),(yyvsp[-1].pExpression),cfield,"f"); } break; case 578: /* expr_mtag: expr2 "?." "$f" '(' expr2 ')' */ - { - auto cfield = new ExprSafeField(tokAt(scanner,(yylsp[-4])), tokAt(scanner,(yylsp[-1])), (yyvsp[-5].pExpression), "``MACRO``TAG``FIELD``"); - (yyval.pExpression) = new ExprTag(tokAt(scanner,(yylsp[-1])),(yyvsp[-1].pExpression),cfield,"f"); + { + auto cfield = new ExprSafeField(tokAt(scanner,(yylsp[-4])), tokAt(scanner,(yylsp[-1])), (yyvsp[-5].pExpression), "``MACRO``TAG``FIELD``"); + (yyval.pExpression) = new ExprTag(tokAt(scanner,(yylsp[-1])),(yyvsp[-1].pExpression),cfield,"f"); } break; case 579: /* expr_mtag: expr2 '.' '.' "$f" '(' expr2 ')' */ - { - auto cfield = new ExprField(tokAt(scanner,(yylsp[-4])), tokAt(scanner,(yylsp[-1])), (yyvsp[-6].pExpression), "``MACRO``TAG``FIELD``", true); - (yyval.pExpression) = new ExprTag(tokAt(scanner,(yylsp[-1])),(yyvsp[-1].pExpression),cfield,"f"); + { + auto cfield = new ExprField(tokAt(scanner,(yylsp[-4])), tokAt(scanner,(yylsp[-1])), (yyvsp[-6].pExpression), "``MACRO``TAG``FIELD``", true); + (yyval.pExpression) = new ExprTag(tokAt(scanner,(yylsp[-1])),(yyvsp[-1].pExpression),cfield,"f"); } break; case 580: /* expr_mtag: expr2 '.' "?." "$f" '(' expr2 ')' */ - { - auto cfield = new ExprSafeField(tokAt(scanner,(yylsp[-4])), tokAt(scanner,(yylsp[-1])), (yyvsp[-6].pExpression), "``MACRO``TAG``FIELD``", true); - (yyval.pExpression) = new ExprTag(tokAt(scanner,(yylsp[-1])),(yyvsp[-1].pExpression),cfield,"f"); + { + auto cfield = new ExprSafeField(tokAt(scanner,(yylsp[-4])), tokAt(scanner,(yylsp[-1])), (yyvsp[-6].pExpression), "``MACRO``TAG``FIELD``", true); + (yyval.pExpression) = new ExprTag(tokAt(scanner,(yylsp[-1])),(yyvsp[-1].pExpression),cfield,"f"); } break; case 581: /* expr_mtag: expr2 "as" "$f" '(' expr2 ')' */ - { - auto cfield = new ExprAsVariant(tokAt(scanner,(yylsp[-4])),(yyvsp[-5].pExpression),"``MACRO``TAG``FIELD``"); - (yyval.pExpression) = new ExprTag(tokAt(scanner,(yylsp[-1])),(yyvsp[-1].pExpression),cfield,"f"); + { + auto cfield = new ExprAsVariant(tokAt(scanner,(yylsp[-4])),(yyvsp[-5].pExpression),"``MACRO``TAG``FIELD``"); + (yyval.pExpression) = new ExprTag(tokAt(scanner,(yylsp[-1])),(yyvsp[-1].pExpression),cfield,"f"); } break; case 582: /* expr_mtag: expr2 '?' "as" "$f" '(' expr2 ')' */ - { - auto cfield = new ExprSafeAsVariant(tokAt(scanner,(yylsp[-4])),(yyvsp[-6].pExpression),"``MACRO``TAG``FIELD``"); - (yyval.pExpression) = new ExprTag(tokAt(scanner,(yylsp[-1])),(yyvsp[-1].pExpression),cfield,"f"); + { + auto cfield = new ExprSafeAsVariant(tokAt(scanner,(yylsp[-4])),(yyvsp[-6].pExpression),"``MACRO``TAG``FIELD``"); + (yyval.pExpression) = new ExprTag(tokAt(scanner,(yylsp[-1])),(yyvsp[-1].pExpression),cfield,"f"); } break; case 583: /* expr_mtag: expr2 "is" "$f" '(' expr2 ')' */ - { - auto cfield = new ExprIsVariant(tokAt(scanner,(yylsp[-4])),(yyvsp[-5].pExpression),"``MACRO``TAG``FIELD``"); - (yyval.pExpression) = new ExprTag(tokAt(scanner,(yylsp[-1])),(yyvsp[-1].pExpression),cfield,"f"); + { + auto cfield = new ExprIsVariant(tokAt(scanner,(yylsp[-4])),(yyvsp[-5].pExpression),"``MACRO``TAG``FIELD``"); + (yyval.pExpression) = new ExprTag(tokAt(scanner,(yylsp[-1])),(yyvsp[-1].pExpression),cfield,"f"); } break; case 584: /* expr_mtag: '@' '@' "$c" '(' expr2 ')' */ - { - auto ccall = new ExprAddr(tokAt(scanner,(yylsp[-4])),"``MACRO``TAG``ADDR``"); - (yyval.pExpression) = new ExprTag(tokAt(scanner,(yylsp[-3])),(yyvsp[-1].pExpression),ccall,"c"); + { + auto ccall = new ExprAddr(tokAt(scanner,(yylsp[-4])),"``MACRO``TAG``ADDR``"); + (yyval.pExpression) = new ExprTag(tokAt(scanner,(yylsp[-3])),(yyvsp[-1].pExpression),ccall,"c"); } break; @@ -9803,14 +9805,14 @@ YYLTYPE yylloc = yyloc_default; break; case 586: /* optional_field_annotation: "[[" annotation_argument_list ']' ']' */ - { - if (format::prepare_rule(format::Pos::from(tokAt(scanner, (yylsp[-3]))))) { - for (const auto &arg: *(yyvsp[-2].aaList)) { - format::get_writer() << "@" << format::get_substring(arg.at); - } - format::finish_rule(format::Pos::from_last(tokAt(scanner, (yylsp[0])))); - } - (yyval.aaList) = (yyvsp[-2].aaList); /*this one is gone when BRABRA is disabled*/ + { + if (format::prepare_rule(format::Pos::from(tokAt(scanner, (yylsp[-3]))))) { + for (const auto &arg: *(yyvsp[-2].aaList)) { + format::get_writer() << "@" << format::get_substring(arg.at); + } + format::finish_rule(format::Pos::from_last(tokAt(scanner, (yylsp[0])))); + } + (yyval.aaList) = (yyvsp[-2].aaList); /*this one is gone when BRABRA is disabled*/ } break; @@ -9859,13 +9861,13 @@ YYLTYPE yylloc = yyloc_default; break; case 598: /* structure_variable_declaration: optional_field_annotation optional_static_member_variable optional_override optional_public_or_private_member_variable variable_declaration */ - { - (yyvsp[0].pVarDecl)->override = (yyvsp[-2].i) == OVERRIDE_OVERRIDE; - (yyvsp[0].pVarDecl)->sealed = (yyvsp[-2].i) == OVERRIDE_SEALED; - (yyvsp[0].pVarDecl)->annotation = (yyvsp[-4].aaList); - (yyvsp[0].pVarDecl)->isPrivate = (yyvsp[-1].b); - (yyvsp[0].pVarDecl)->isStatic = (yyvsp[-3].b); - (yyval.pVarDecl) = (yyvsp[0].pVarDecl); + { + (yyvsp[0].pVarDecl)->override = (yyvsp[-2].i) == OVERRIDE_OVERRIDE; + (yyvsp[0].pVarDecl)->sealed = (yyvsp[-2].i) == OVERRIDE_SEALED; + (yyvsp[0].pVarDecl)->annotation = (yyvsp[-4].aaList); + (yyvsp[0].pVarDecl)->isPrivate = (yyvsp[-1].b); + (yyvsp[0].pVarDecl)->isStatic = (yyvsp[-3].b); + (yyval.pVarDecl) = (yyvsp[0].pVarDecl); } break; @@ -9886,8 +9888,8 @@ YYLTYPE yylloc = yyloc_default; break; case 603: /* struct_variable_declaration_list: %empty */ - { - (yyval.pVarDeclList) = new vector(); + { + (yyval.pVarDeclList) = new vector(); } break; @@ -9896,118 +9898,118 @@ YYLTYPE yylloc = yyloc_default; break; case 605: /* struct_variable_declaration_list: struct_variable_declaration_list "typedef" $@37 "name" '=' type_declaration semicolon opt_sem */ - { - (yyval.pVarDeclList) = (yyvsp[-7].pVarDeclList); - ast_structureAlias(scanner,(yyvsp[-4].s),(yyvsp[-2].pTypeDecl),tokAt(scanner,(yylsp[-6]))); + { + (yyval.pVarDeclList) = (yyvsp[-7].pVarDeclList); + ast_structureAlias(scanner,(yyvsp[-4].s),(yyvsp[-2].pTypeDecl),tokAt(scanner,(yylsp[-6]))); } break; case 606: /* $@38: %empty */ - { - if ( !yyextra->g_CommentReaders.empty() ) { - auto tak = tokAt(scanner,(yylsp[0])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeStructureFields(tak); - } + { + if ( !yyextra->g_CommentReaders.empty() ) { + auto tak = tokAt(scanner,(yylsp[0])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeStructureFields(tak); + } } break; case 607: /* struct_variable_declaration_list: struct_variable_declaration_list $@38 structure_variable_declaration semicolon opt_sem */ - { - (yyval.pVarDeclList) = (yyvsp[-4].pVarDeclList); - if ( (yyvsp[-2].pVarDecl) ) (yyvsp[-4].pVarDeclList)->push_back((yyvsp[-2].pVarDecl)); - if ( !yyextra->g_CommentReaders.empty() ) { - auto tak = tokAt(scanner,(yylsp[-4])); - for ( auto & crd : yyextra->g_CommentReaders ) { - for ( const auto & nl : *((yyvsp[-2].pVarDecl)->pNameList) ) { - crd->afterStructureField(nl.name.c_str(), nl.at); - } - } - for ( auto & crd : yyextra->g_CommentReaders ) crd->afterStructureFields(tak); - } + { + (yyval.pVarDeclList) = (yyvsp[-4].pVarDeclList); + if ( (yyvsp[-2].pVarDecl) ) (yyvsp[-4].pVarDeclList)->push_back((yyvsp[-2].pVarDecl)); + if ( !yyextra->g_CommentReaders.empty() ) { + auto tak = tokAt(scanner,(yylsp[-4])); + for ( auto & crd : yyextra->g_CommentReaders ) { + for ( const auto & nl : *((yyvsp[-2].pVarDecl)->pNameList) ) { + crd->afterStructureField(nl.name.c_str(), nl.at); + } + } + for ( auto & crd : yyextra->g_CommentReaders ) crd->afterStructureFields(tak); + } } break; case 608: /* $@39: %empty */ - { - yyextra->das_force_oxford_comma=true; - if ( !yyextra->g_CommentReaders.empty() ) { - auto tak = tokAt(scanner,(yylsp[-2])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeFunction(tak); - } + { + yyextra->das_force_oxford_comma=true; + if ( !yyextra->g_CommentReaders.empty() ) { + auto tak = tokAt(scanner,(yylsp[-2])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeFunction(tak); + } } break; case 609: /* struct_variable_declaration_list: struct_variable_declaration_list optional_annotation_list "def" optional_public_or_private_member_variable "abstract" optional_constant $@39 function_declaration_header semicolon opt_sem */ - { - if ( !yyextra->g_CommentReaders.empty() ) { - auto tak = tokAt(scanner,(yylsp[-2])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->afterFunction((yyvsp[-2].pFuncDecl),tak); - } - (yyvsp[-2].pFuncDecl)->isTemplate = yyextra->g_thisStructure->isTemplate; - (yyval.pVarDeclList) = ast_structVarDefAbstract(scanner,(yyvsp[-9].pVarDeclList),(yyvsp[-8].faList),(yyvsp[-6].b),(yyvsp[-4].b), (yyvsp[-2].pFuncDecl)); + { + if ( !yyextra->g_CommentReaders.empty() ) { + auto tak = tokAt(scanner,(yylsp[-2])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->afterFunction((yyvsp[-2].pFuncDecl),tak); + } + (yyvsp[-2].pFuncDecl)->isTemplate = yyextra->g_thisStructure->isTemplate; + (yyval.pVarDeclList) = ast_structVarDefAbstract(scanner,(yyvsp[-9].pVarDeclList),(yyvsp[-8].faList),(yyvsp[-6].b),(yyvsp[-4].b), (yyvsp[-2].pFuncDecl)); } break; case 610: /* $@40: %empty */ - { - if ( !yyextra->g_CommentReaders.empty() ) { - auto tak = tokAt(scanner,(yylsp[0])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeFunction(tak); - } + { + if ( !yyextra->g_CommentReaders.empty() ) { + auto tak = tokAt(scanner,(yylsp[0])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeFunction(tak); + } } break; case 611: /* struct_variable_declaration_list: struct_variable_declaration_list optional_annotation_list "def" optional_public_or_private_member_variable optional_static_member_variable optional_override optional_constant $@40 function_declaration_header expression_block opt_sem */ - { - if ( !yyextra->g_CommentReaders.empty() ) { - auto tak = tokAt(scanner,(yylsp[-1])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->afterFunction((yyvsp[-2].pFuncDecl),tak); - } - (yyvsp[-2].pFuncDecl)->isTemplate = yyextra->g_thisStructure->isTemplate; - (yyval.pVarDeclList) = ast_structVarDef(scanner,(yyvsp[-10].pVarDeclList),(yyvsp[-9].faList),(yyvsp[-6].b),(yyvsp[-7].b),(yyvsp[-5].i),(yyvsp[-4].b),(yyvsp[-2].pFuncDecl),(yyvsp[-1].pExpression),tokRangeAt(scanner,(yylsp[-8]),(yylsp[-1])),tokAt(scanner,(yylsp[-9]))); + { + if ( !yyextra->g_CommentReaders.empty() ) { + auto tak = tokAt(scanner,(yylsp[-1])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->afterFunction((yyvsp[-2].pFuncDecl),tak); + } + (yyvsp[-2].pFuncDecl)->isTemplate = yyextra->g_thisStructure->isTemplate; + (yyval.pVarDeclList) = ast_structVarDef(scanner,(yyvsp[-10].pVarDeclList),(yyvsp[-9].faList),(yyvsp[-6].b),(yyvsp[-7].b),(yyvsp[-5].i),(yyvsp[-4].b),(yyvsp[-2].pFuncDecl),(yyvsp[-1].pExpression),tokRangeAt(scanner,(yylsp[-8]),(yylsp[-1])),tokAt(scanner,(yylsp[-9]))); } break; case 612: /* struct_variable_declaration_list: struct_variable_declaration_list '[' annotation_list ']' semicolon opt_sem */ - { - das_yyerror(scanner,"structure field or class method annotation expected to remain on the same line with the field or the class", - tokAt(scanner,(yylsp[-3])), CompilationError::syntax_error); - delete (yyvsp[-3].faList); - (yyval.pVarDeclList) = (yyvsp[-5].pVarDeclList); + { + das_yyerror(scanner,"structure field or class method annotation expected to remain on the same line with the field or the class", + tokAt(scanner,(yylsp[-3])), CompilationError::syntax_error); + delete (yyvsp[-3].faList); + (yyval.pVarDeclList) = (yyvsp[-5].pVarDeclList); } break; case 613: /* function_argument_declaration_no_type: optional_field_annotation kwd_let_var_or_nothing variable_declaration_no_type */ - { - (yyval.pVarDecl) = (yyvsp[0].pVarDecl); - if ( (yyvsp[-1].b) ) { - (yyvsp[0].pVarDecl)->pTypeDecl->constant = true; - } else { - (yyvsp[0].pVarDecl)->pTypeDecl->removeConstant = true; - } - (yyvsp[0].pVarDecl)->annotation = (yyvsp[-2].aaList); + { + (yyval.pVarDecl) = (yyvsp[0].pVarDecl); + if ( (yyvsp[-1].b) ) { + (yyvsp[0].pVarDecl)->pTypeDecl->constant = true; + } else { + (yyvsp[0].pVarDecl)->pTypeDecl->removeConstant = true; + } + (yyvsp[0].pVarDecl)->annotation = (yyvsp[-2].aaList); } break; case 614: /* function_argument_declaration_type: optional_field_annotation kwd_let_var_or_nothing variable_declaration_type */ - { - (yyval.pVarDecl) = (yyvsp[0].pVarDecl); - if ( (yyvsp[-1].b) ) { - (yyvsp[0].pVarDecl)->pTypeDecl->constant = true; - } else { - (yyvsp[0].pVarDecl)->pTypeDecl->removeConstant = true; - } - (yyvsp[0].pVarDecl)->annotation = (yyvsp[-2].aaList); + { + (yyval.pVarDecl) = (yyvsp[0].pVarDecl); + if ( (yyvsp[-1].b) ) { + (yyvsp[0].pVarDecl)->pTypeDecl->constant = true; + } else { + (yyvsp[0].pVarDecl)->pTypeDecl->removeConstant = true; + } + (yyvsp[0].pVarDecl)->annotation = (yyvsp[-2].aaList); } break; case 615: /* function_argument_declaration_type: "$a" '(' expr2 ')' */ - { - auto na = new vector(); - na->push_back(VariableNameAndPosition("``MACRO``TAG``","",tokAt(scanner,(yylsp[-1])))); - auto decl = new VariableDeclaration(na, new TypeDecl(Type::none), (yyvsp[-1].pExpression)); - decl->pTypeDecl->isTag = true; - (yyval.pVarDecl) = decl; + { + auto na = new vector(); + na->push_back(VariableNameAndPosition("``MACRO``TAG``","",tokAt(scanner,(yylsp[-1])))); + auto decl = new VariableDeclaration(na, new TypeDecl(Type::none), (yyvsp[-1].pExpression)); + decl->pTypeDecl->isTag = true; + (yyval.pVarDecl) = decl; } break; @@ -10032,17 +10034,17 @@ YYLTYPE yylloc = yyloc_default; break; case 621: /* tuple_type: type_declaration */ - { - (yyval.pVarDecl) = new VariableDeclaration(nullptr,(yyvsp[0].pTypeDecl),nullptr); + { + (yyval.pVarDecl) = new VariableDeclaration(nullptr,(yyvsp[0].pTypeDecl),nullptr); } break; case 622: /* tuple_type: "name" ':' type_declaration */ - { - auto na = new vector(); - na->push_back(VariableNameAndPosition(*(yyvsp[-2].s),"",tokAt(scanner,(yylsp[-2])))); - (yyval.pVarDecl) = new VariableDeclaration(na,(yyvsp[0].pTypeDecl),nullptr); - delete (yyvsp[-2].s); + { + auto na = new vector(); + na->push_back(VariableNameAndPosition(*(yyvsp[-2].s),"",tokAt(scanner,(yylsp[-2])))); + (yyval.pVarDecl) = new VariableDeclaration(na,(yyvsp[0].pTypeDecl),nullptr); + delete (yyvsp[-2].s); } break; @@ -10055,38 +10057,38 @@ YYLTYPE yylloc = yyloc_default; break; case 625: /* tuple_alias_type_list: %empty */ - { - (yyval.pVarDeclList) = new vector(); + { + (yyval.pVarDeclList) = new vector(); } break; case 626: /* tuple_alias_type_list: tuple_alias_type_list c_or_s */ - { - (yyval.pVarDeclList) = (yyvsp[-1].pVarDeclList); + { + (yyval.pVarDeclList) = (yyvsp[-1].pVarDeclList); } break; case 627: /* tuple_alias_type_list: tuple_alias_type_list tuple_type c_or_s */ - { - (yyval.pVarDeclList) = (yyvsp[-2].pVarDeclList); (yyvsp[-2].pVarDeclList)->push_back((yyvsp[-1].pVarDecl)); - /* - if ( !yyextra->g_CommentReaders.empty() ) { - for ( auto & crd : yyextra->g_CommentReaders ) { - for ( const auto & nl : *($decl->pNameList) ) { - crd->afterVariantEntry(nl.name.c_str(), nl.at); - } - } - } - */ + { + (yyval.pVarDeclList) = (yyvsp[-2].pVarDeclList); (yyvsp[-2].pVarDeclList)->push_back((yyvsp[-1].pVarDecl)); + /* + if ( !yyextra->g_CommentReaders.empty() ) { + for ( auto & crd : yyextra->g_CommentReaders ) { + for ( const auto & nl : *($decl->pNameList) ) { + crd->afterVariantEntry(nl.name.c_str(), nl.at); + } + } + } + */ } break; case 628: /* variant_type: "name" ':' type_declaration */ - { - auto na = new vector(); - na->push_back(VariableNameAndPosition(*(yyvsp[-2].s),"",tokAt(scanner,(yylsp[-2])))); - (yyval.pVarDecl) = new VariableDeclaration(na,(yyvsp[0].pTypeDecl),nullptr); - delete (yyvsp[-2].s); + { + auto na = new vector(); + na->push_back(VariableNameAndPosition(*(yyvsp[-2].s),"",tokAt(scanner,(yylsp[-2])))); + (yyval.pVarDecl) = new VariableDeclaration(na,(yyvsp[0].pTypeDecl),nullptr); + delete (yyvsp[-2].s); } break; @@ -10099,27 +10101,27 @@ YYLTYPE yylloc = yyloc_default; break; case 631: /* variant_alias_type_list: %empty */ - { - (yyval.pVarDeclList) = new vector(); + { + (yyval.pVarDeclList) = new vector(); } break; case 632: /* variant_alias_type_list: variant_alias_type_list c_or_s */ - { - (yyval.pVarDeclList) = (yyvsp[-1].pVarDeclList); + { + (yyval.pVarDeclList) = (yyvsp[-1].pVarDeclList); } break; case 633: /* variant_alias_type_list: variant_alias_type_list variant_type c_or_s */ - { - (yyval.pVarDeclList) = (yyvsp[-2].pVarDeclList); (yyvsp[-2].pVarDeclList)->push_back((yyvsp[-1].pVarDecl)); - if ( !yyextra->g_CommentReaders.empty() ) { - for ( auto & crd : yyextra->g_CommentReaders ) { - for ( const auto & nl : *((yyvsp[-1].pVarDecl)->pNameList) ) { - crd->afterVariantEntry(nl.name.c_str(), nl.at); - } - } - } + { + (yyval.pVarDeclList) = (yyvsp[-2].pVarDeclList); (yyvsp[-2].pVarDeclList)->push_back((yyvsp[-1].pVarDecl)); + if ( !yyextra->g_CommentReaders.empty() ) { + for ( auto & crd : yyextra->g_CommentReaders ) { + for ( const auto & nl : *((yyvsp[-1].pVarDecl)->pNameList) ) { + crd->afterVariantEntry(nl.name.c_str(), nl.at); + } + } + } } break; @@ -10132,54 +10134,54 @@ YYLTYPE yylloc = yyloc_default; break; case 636: /* variable_declaration_no_type: variable_name_with_pos_list */ - { - auto autoT = new TypeDecl(Type::autoinfer); - autoT->at = tokAt(scanner,(yylsp[0])); - autoT->ref = false; - (yyval.pVarDecl) = new VariableDeclaration((yyvsp[0].pNameWithPosList),autoT,nullptr); + { + auto autoT = new TypeDecl(Type::autoinfer); + autoT->at = tokAt(scanner,(yylsp[0])); + autoT->ref = false; + (yyval.pVarDecl) = new VariableDeclaration((yyvsp[0].pNameWithPosList),autoT,nullptr); } break; case 637: /* variable_declaration_no_type: variable_name_with_pos_list '&' */ - { - auto autoT = new TypeDecl(Type::autoinfer); - autoT->at = tokAt(scanner,(yylsp[-1])); - autoT->ref = true; - (yyval.pVarDecl) = new VariableDeclaration((yyvsp[-1].pNameWithPosList),autoT,nullptr); + { + auto autoT = new TypeDecl(Type::autoinfer); + autoT->at = tokAt(scanner,(yylsp[-1])); + autoT->ref = true; + (yyval.pVarDecl) = new VariableDeclaration((yyvsp[-1].pNameWithPosList),autoT,nullptr); } break; case 638: /* variable_declaration_no_type: variable_name_with_pos_list copy_or_move expr */ - { - auto typeDecl = new TypeDecl(Type::autoinfer); - typeDecl->at = tokAt(scanner,(yylsp[-2])); - (yyval.pVarDecl) = new VariableDeclaration((yyvsp[-2].pNameWithPosList),typeDecl,(yyvsp[0].pExpression)); - (yyval.pVarDecl)->init_via_move = (yyvsp[-1].b); + { + auto typeDecl = new TypeDecl(Type::autoinfer); + typeDecl->at = tokAt(scanner,(yylsp[-2])); + (yyval.pVarDecl) = new VariableDeclaration((yyvsp[-2].pNameWithPosList),typeDecl,(yyvsp[0].pExpression)); + (yyval.pVarDecl)->init_via_move = (yyvsp[-1].b); } break; case 639: /* variable_declaration_type: variable_name_with_pos_list ':' type_declaration */ - { - (yyval.pVarDecl) = new VariableDeclaration((yyvsp[-2].pNameWithPosList),(yyvsp[0].pTypeDecl),nullptr); + { + (yyval.pVarDecl) = new VariableDeclaration((yyvsp[-2].pNameWithPosList),(yyvsp[0].pTypeDecl),nullptr); } break; case 640: /* variable_declaration_type: variable_name_with_pos_list ':' type_declaration copy_or_move expr */ - { - (yyval.pVarDecl) = new VariableDeclaration((yyvsp[-4].pNameWithPosList),(yyvsp[-2].pTypeDecl),(yyvsp[0].pExpression)); - (yyval.pVarDecl)->init_via_move = (yyvsp[-1].b); + { + (yyval.pVarDecl) = new VariableDeclaration((yyvsp[-4].pNameWithPosList),(yyvsp[-2].pTypeDecl),(yyvsp[0].pExpression)); + (yyval.pVarDecl)->init_via_move = (yyvsp[-1].b); } break; case 641: /* variable_declaration: variable_declaration_type */ - { - (yyval.pVarDecl) = (yyvsp[0].pVarDecl); + { + (yyval.pVarDecl) = (yyvsp[0].pVarDecl); } break; case 642: /* variable_declaration: variable_declaration_no_type */ - { - (yyval.pVarDecl) = (yyvsp[0].pVarDecl); + { + (yyval.pVarDecl) = (yyvsp[0].pVarDecl); } break; @@ -10204,139 +10206,139 @@ YYLTYPE yylloc = yyloc_default; break; case 648: /* let_variable_name_with_pos_list: "name" */ - { - das_checkName(scanner,*(yyvsp[0].s),tokAt(scanner,(yylsp[0]))); - auto pSL = new vector(); - pSL->push_back(VariableNameAndPosition(*(yyvsp[0].s),"",tokAt(scanner,(yylsp[0])))); - (yyval.pNameWithPosList) = pSL; - delete (yyvsp[0].s); + { + das_checkName(scanner,*(yyvsp[0].s),tokAt(scanner,(yylsp[0]))); + auto pSL = new vector(); + pSL->push_back(VariableNameAndPosition(*(yyvsp[0].s),"",tokAt(scanner,(yylsp[0])))); + (yyval.pNameWithPosList) = pSL; + delete (yyvsp[0].s); } break; case 649: /* let_variable_name_with_pos_list: "$i" '(' expr2 ')' */ - { - auto pSL = new vector(); - pSL->push_back(VariableNameAndPosition("``MACRO``TAG``","",tokAt(scanner,(yylsp[-1])),(yyvsp[-1].pExpression))); - (yyval.pNameWithPosList) = pSL; + { + auto pSL = new vector(); + pSL->push_back(VariableNameAndPosition("``MACRO``TAG``","",tokAt(scanner,(yylsp[-1])),(yyvsp[-1].pExpression))); + (yyval.pNameWithPosList) = pSL; } break; case 650: /* let_variable_name_with_pos_list: "name" "aka" "name" */ - { - das_checkName(scanner,*(yyvsp[-2].s),tokAt(scanner,(yylsp[-2]))); - das_checkName(scanner,*(yyvsp[0].s),tokAt(scanner,(yylsp[0]))); - auto pSL = new vector(); - pSL->push_back(VariableNameAndPosition(*(yyvsp[-2].s),*(yyvsp[0].s),tokAt(scanner,(yylsp[-2])))); - (yyval.pNameWithPosList) = pSL; - delete (yyvsp[-2].s); - delete (yyvsp[0].s); + { + das_checkName(scanner,*(yyvsp[-2].s),tokAt(scanner,(yylsp[-2]))); + das_checkName(scanner,*(yyvsp[0].s),tokAt(scanner,(yylsp[0]))); + auto pSL = new vector(); + pSL->push_back(VariableNameAndPosition(*(yyvsp[-2].s),*(yyvsp[0].s),tokAt(scanner,(yylsp[-2])))); + (yyval.pNameWithPosList) = pSL; + delete (yyvsp[-2].s); + delete (yyvsp[0].s); } break; case 651: /* let_variable_name_with_pos_list: let_variable_name_with_pos_list ',' "name" */ - { - das_checkName(scanner,*(yyvsp[0].s),tokAt(scanner,(yylsp[0]))); - (yyvsp[-2].pNameWithPosList)->push_back(VariableNameAndPosition(*(yyvsp[0].s),"",tokAt(scanner,(yylsp[0])))); - (yyval.pNameWithPosList) = (yyvsp[-2].pNameWithPosList); - delete (yyvsp[0].s); + { + das_checkName(scanner,*(yyvsp[0].s),tokAt(scanner,(yylsp[0]))); + (yyvsp[-2].pNameWithPosList)->push_back(VariableNameAndPosition(*(yyvsp[0].s),"",tokAt(scanner,(yylsp[0])))); + (yyval.pNameWithPosList) = (yyvsp[-2].pNameWithPosList); + delete (yyvsp[0].s); } break; case 652: /* let_variable_name_with_pos_list: let_variable_name_with_pos_list ',' "name" "aka" "name" */ - { - das_checkName(scanner,*(yyvsp[-2].s),tokAt(scanner,(yylsp[-2]))); - das_checkName(scanner,*(yyvsp[0].s),tokAt(scanner,(yylsp[0]))); - (yyvsp[-4].pNameWithPosList)->push_back(VariableNameAndPosition(*(yyvsp[-2].s),*(yyvsp[0].s),tokAt(scanner,(yylsp[-2])))); - (yyval.pNameWithPosList) = (yyvsp[-4].pNameWithPosList); - delete (yyvsp[-2].s); - delete (yyvsp[0].s); + { + das_checkName(scanner,*(yyvsp[-2].s),tokAt(scanner,(yylsp[-2]))); + das_checkName(scanner,*(yyvsp[0].s),tokAt(scanner,(yylsp[0]))); + (yyvsp[-4].pNameWithPosList)->push_back(VariableNameAndPosition(*(yyvsp[-2].s),*(yyvsp[0].s),tokAt(scanner,(yylsp[-2])))); + (yyval.pNameWithPosList) = (yyvsp[-4].pNameWithPosList); + delete (yyvsp[-2].s); + delete (yyvsp[0].s); } break; case 653: /* let_variable_declaration: let_variable_name_with_pos_list ':' type_declaration_no_options semicolon */ - { - (yyval.pVarDecl) = new VariableDeclaration((yyvsp[-3].pNameWithPosList),(yyvsp[-1].pTypeDecl),nullptr); + { + (yyval.pVarDecl) = new VariableDeclaration((yyvsp[-3].pNameWithPosList),(yyvsp[-1].pTypeDecl),nullptr); } break; case 654: /* let_variable_declaration: let_variable_name_with_pos_list ':' type_declaration_no_options copy_or_move_or_clone expr semicolon */ - { - (yyval.pVarDecl) = new VariableDeclaration((yyvsp[-5].pNameWithPosList),(yyvsp[-3].pTypeDecl),(yyvsp[-1].pExpression)); - (yyval.pVarDecl)->init_via_move = ((yyvsp[-2].i) & CorM_MOVE) !=0; - (yyval.pVarDecl)->init_via_clone = ((yyvsp[-2].i) & CorM_CLONE) !=0; + { + (yyval.pVarDecl) = new VariableDeclaration((yyvsp[-5].pNameWithPosList),(yyvsp[-3].pTypeDecl),(yyvsp[-1].pExpression)); + (yyval.pVarDecl)->init_via_move = ((yyvsp[-2].i) & CorM_MOVE) !=0; + (yyval.pVarDecl)->init_via_clone = ((yyvsp[-2].i) & CorM_CLONE) !=0; } break; case 655: /* let_variable_declaration: let_variable_name_with_pos_list ':' type_declaration_no_options copy_or_move_or_clone expr_pipe */ - { - (yyval.pVarDecl) = new VariableDeclaration((yyvsp[-4].pNameWithPosList),(yyvsp[-2].pTypeDecl),(yyvsp[0].pExpression)); - (yyval.pVarDecl)->init_via_move = ((yyvsp[-1].i) & CorM_MOVE) !=0; - (yyval.pVarDecl)->init_via_clone = ((yyvsp[-1].i) & CorM_CLONE) !=0; + { + (yyval.pVarDecl) = new VariableDeclaration((yyvsp[-4].pNameWithPosList),(yyvsp[-2].pTypeDecl),(yyvsp[0].pExpression)); + (yyval.pVarDecl)->init_via_move = ((yyvsp[-1].i) & CorM_MOVE) !=0; + (yyval.pVarDecl)->init_via_clone = ((yyvsp[-1].i) & CorM_CLONE) !=0; } break; case 656: /* let_variable_declaration: let_variable_name_with_pos_list optional_ref copy_or_move_or_clone expr semicolon */ - { - auto typeDecl = new TypeDecl(Type::autoinfer); - typeDecl->at = tokAt(scanner,(yylsp[-4])); - typeDecl->ref = (yyvsp[-3].b); - (yyval.pVarDecl) = new VariableDeclaration((yyvsp[-4].pNameWithPosList),typeDecl,(yyvsp[-1].pExpression)); - (yyval.pVarDecl)->init_via_move = ((yyvsp[-2].i) & CorM_MOVE) !=0; - (yyval.pVarDecl)->init_via_clone = ((yyvsp[-2].i) & CorM_CLONE) !=0; + { + auto typeDecl = new TypeDecl(Type::autoinfer); + typeDecl->at = tokAt(scanner,(yylsp[-4])); + typeDecl->ref = (yyvsp[-3].b); + (yyval.pVarDecl) = new VariableDeclaration((yyvsp[-4].pNameWithPosList),typeDecl,(yyvsp[-1].pExpression)); + (yyval.pVarDecl)->init_via_move = ((yyvsp[-2].i) & CorM_MOVE) !=0; + (yyval.pVarDecl)->init_via_clone = ((yyvsp[-2].i) & CorM_CLONE) !=0; } break; case 657: /* let_variable_declaration: let_variable_name_with_pos_list optional_ref copy_or_move_or_clone expr */ - { - // Until absence of semicolon with lambda is not fixed - format::try_semicolon_at_eol(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); - auto typeDecl = new TypeDecl(Type::autoinfer); - typeDecl->at = tokAt(scanner,(yylsp[-3])); - typeDecl->ref = (yyvsp[-2].b); - (yyval.pVarDecl) = new VariableDeclaration((yyvsp[-3].pNameWithPosList),typeDecl,(yyvsp[0].pExpression)); - (yyval.pVarDecl)->init_via_move = ((yyvsp[-1].i) & CorM_MOVE) !=0; - (yyval.pVarDecl)->init_via_clone = ((yyvsp[-1].i) & CorM_CLONE) !=0; + { + // Until absence of semicolon with lambda is not fixed + format::try_semicolon_at_eol(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); + auto typeDecl = new TypeDecl(Type::autoinfer); + typeDecl->at = tokAt(scanner,(yylsp[-3])); + typeDecl->ref = (yyvsp[-2].b); + (yyval.pVarDecl) = new VariableDeclaration((yyvsp[-3].pNameWithPosList),typeDecl,(yyvsp[0].pExpression)); + (yyval.pVarDecl)->init_via_move = ((yyvsp[-1].i) & CorM_MOVE) !=0; + (yyval.pVarDecl)->init_via_clone = ((yyvsp[-1].i) & CorM_CLONE) !=0; } break; case 658: /* let_variable_declaration: let_variable_name_with_pos_list optional_ref copy_or_move_or_clone expr_pipe */ - { - auto typeDecl = new TypeDecl(Type::autoinfer); - typeDecl->at = tokAt(scanner,(yylsp[-3])); - typeDecl->ref = (yyvsp[-2].b); - (yyval.pVarDecl) = new VariableDeclaration((yyvsp[-3].pNameWithPosList),typeDecl,(yyvsp[0].pExpression)); - (yyval.pVarDecl)->init_via_move = ((yyvsp[-1].i) & CorM_MOVE) !=0; - (yyval.pVarDecl)->init_via_clone = ((yyvsp[-1].i) & CorM_CLONE) !=0; + { + auto typeDecl = new TypeDecl(Type::autoinfer); + typeDecl->at = tokAt(scanner,(yylsp[-3])); + typeDecl->ref = (yyvsp[-2].b); + (yyval.pVarDecl) = new VariableDeclaration((yyvsp[-3].pNameWithPosList),typeDecl,(yyvsp[0].pExpression)); + (yyval.pVarDecl)->init_via_move = ((yyvsp[-1].i) & CorM_MOVE) !=0; + (yyval.pVarDecl)->init_via_clone = ((yyvsp[-1].i) & CorM_CLONE) !=0; } break; case 659: /* global_variable_declaration_list: %empty */ - { - (yyval.pVarDeclList) = new vector(); + { + (yyval.pVarDeclList) = new vector(); } break; case 660: /* $@41: %empty */ - { - if ( !yyextra->g_CommentReaders.empty() ) { - auto tak = tokAt(scanner,(yylsp[0])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeGlobalVariables(tak); - } + { + if ( !yyextra->g_CommentReaders.empty() ) { + auto tak = tokAt(scanner,(yylsp[0])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeGlobalVariables(tak); + } } break; case 661: /* global_variable_declaration_list: global_variable_declaration_list $@41 optional_field_annotation let_variable_declaration opt_sem */ - { - if ( !yyextra->g_CommentReaders.empty() ) { - auto tak = tokAt(scanner,(yylsp[-1])); - for ( auto & crd : yyextra->g_CommentReaders ) - for ( auto & nl : *((yyvsp[-1].pVarDecl)->pNameList) ) - crd->afterGlobalVariable(nl.name.c_str(),tak); - for ( auto & crd : yyextra->g_CommentReaders ) crd->afterGlobalVariables(tak); - } - (yyval.pVarDeclList) = (yyvsp[-4].pVarDeclList); - (yyvsp[-1].pVarDecl)->annotation = (yyvsp[-2].aaList); - (yyvsp[-4].pVarDeclList)->push_back((yyvsp[-1].pVarDecl)); + { + if ( !yyextra->g_CommentReaders.empty() ) { + auto tak = tokAt(scanner,(yylsp[-1])); + for ( auto & crd : yyextra->g_CommentReaders ) + for ( auto & nl : *((yyvsp[-1].pVarDecl)->pNameList) ) + crd->afterGlobalVariable(nl.name.c_str(),tak); + for ( auto & crd : yyextra->g_CommentReaders ) crd->afterGlobalVariables(tak); + } + (yyval.pVarDeclList) = (yyvsp[-4].pVarDeclList); + (yyvsp[-1].pVarDecl)->annotation = (yyvsp[-2].aaList); + (yyvsp[-4].pVarDeclList)->push_back((yyvsp[-1].pVarDecl)); } break; @@ -10361,79 +10363,79 @@ YYLTYPE yylloc = yyloc_default; break; case 667: /* global_let: kwd_let optional_shared optional_public_or_private_variable open_block global_variable_declaration_list close_block */ - { - handle_brace(format::Pos::from(tokAt(scanner, (yylsp[-2]))), (yyvsp[-2].ui), - format::get_substring(tokRangeAt(scanner, (yylsp[-2]), (yylsp[0]))), - yyextra->das_tab_size, - format::Pos::from_last(tokAt(scanner,(yylsp[0])))); - ast_globalLetList(scanner,(yyvsp[-5].b),(yyvsp[-4].b),(yyvsp[-3].b),(yyvsp[-1].pVarDeclList)); + { + handle_brace(format::Pos::from(tokAt(scanner, (yylsp[-2]))), (yyvsp[-2].ui), + format::get_substring(tokRangeAt(scanner, (yylsp[-2]), (yylsp[0]))), + yyextra->das_tab_size, + format::Pos::from_last(tokAt(scanner,(yylsp[0])))); + ast_globalLetList(scanner,(yyvsp[-5].b),(yyvsp[-4].b),(yyvsp[-3].b),(yyvsp[-1].pVarDeclList)); } break; case 668: /* $@42: %empty */ - { - yyextra->das_force_oxford_comma=true; - if ( !yyextra->g_CommentReaders.empty() ) { - auto tak = tokAt(scanner,(yylsp[0])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeGlobalVariables(tak); - } + { + yyextra->das_force_oxford_comma=true; + if ( !yyextra->g_CommentReaders.empty() ) { + auto tak = tokAt(scanner,(yylsp[0])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeGlobalVariables(tak); + } } break; case 669: /* global_let: kwd_let optional_shared optional_public_or_private_variable $@42 optional_field_annotation let_variable_declaration */ - { - if ( !yyextra->g_CommentReaders.empty() ) { - auto tak = tokAt(scanner,(yylsp[0])); - for ( auto & crd : yyextra->g_CommentReaders ) - for ( auto & nl : *((yyvsp[0].pVarDecl)->pNameList) ) - crd->afterGlobalVariable(nl.name.c_str(),tak); - for ( auto & crd : yyextra->g_CommentReaders ) crd->afterGlobalVariables(tak); - } - ast_globalLet(scanner,(yyvsp[-5].b),(yyvsp[-4].b),(yyvsp[-3].b),(yyvsp[-1].aaList),(yyvsp[0].pVarDecl)); + { + if ( !yyextra->g_CommentReaders.empty() ) { + auto tak = tokAt(scanner,(yylsp[0])); + for ( auto & crd : yyextra->g_CommentReaders ) + for ( auto & nl : *((yyvsp[0].pVarDecl)->pNameList) ) + crd->afterGlobalVariable(nl.name.c_str(),tak); + for ( auto & crd : yyextra->g_CommentReaders ) crd->afterGlobalVariables(tak); + } + ast_globalLet(scanner,(yyvsp[-5].b),(yyvsp[-4].b),(yyvsp[-3].b),(yyvsp[-1].aaList),(yyvsp[0].pVarDecl)); } break; case 670: /* enum_list: %empty */ - { - (yyval.pEnumList) = new Enumeration(); + { + (yyval.pEnumList) = new Enumeration(); } break; case 671: /* enum_list: enum_list "name" opt_sem */ - { - format::skip_token(true, false, tokAt(scanner,(yylsp[0]))); - das_checkName(scanner,*(yyvsp[-1].s),tokAt(scanner,(yylsp[-1]))); - if ( !(yyvsp[-2].pEnumList)->add(*(yyvsp[-1].s),nullptr,tokAt(scanner,(yylsp[-1]))) ) { - das_yyerror(scanner,"enumeration already declared " + *(yyvsp[-1].s), tokAt(scanner,(yylsp[-1])), - CompilationError::enumeration_value_already_declared); - } - if ( !yyextra->g_CommentReaders.empty() ) { - auto tokName = tokAt(scanner,(yylsp[-1])); - for ( auto & crd : yyextra->g_CommentReaders ) { - crd->afterEnumerationEntry((yyvsp[-1].s)->c_str(), tokName); - } - } - delete (yyvsp[-1].s); - (yyval.pEnumList) = (yyvsp[-2].pEnumList); + { + format::skip_token(true, false, tokAt(scanner,(yylsp[0]))); + das_checkName(scanner,*(yyvsp[-1].s),tokAt(scanner,(yylsp[-1]))); + if ( !(yyvsp[-2].pEnumList)->add(*(yyvsp[-1].s),nullptr,tokAt(scanner,(yylsp[-1]))) ) { + das_yyerror(scanner,"enumeration already declared " + *(yyvsp[-1].s), tokAt(scanner,(yylsp[-1])), + CompilationError::enumeration_value_already_declared); + } + if ( !yyextra->g_CommentReaders.empty() ) { + auto tokName = tokAt(scanner,(yylsp[-1])); + for ( auto & crd : yyextra->g_CommentReaders ) { + crd->afterEnumerationEntry((yyvsp[-1].s)->c_str(), tokName); + } + } + delete (yyvsp[-1].s); + (yyval.pEnumList) = (yyvsp[-2].pEnumList); } break; case 672: /* enum_list: enum_list "name" '=' expr opt_sem */ - { - format::skip_token(true, false, tokAt(scanner,(yylsp[0]))); - das_checkName(scanner,*(yyvsp[-3].s),tokAt(scanner,(yylsp[-3]))); - if ( !(yyvsp[-4].pEnumList)->add(*(yyvsp[-3].s),(yyvsp[-1].pExpression),tokAt(scanner,(yylsp[-3]))) ) { - das_yyerror(scanner,"enumeration value already declared " + *(yyvsp[-3].s), tokAt(scanner,(yylsp[-3])), - CompilationError::enumeration_value_already_declared); - } - if ( !yyextra->g_CommentReaders.empty() ) { - auto tokName = tokAt(scanner,(yylsp[-3])); - for ( auto & crd : yyextra->g_CommentReaders ) { - crd->afterEnumerationEntry((yyvsp[-3].s)->c_str(), tokName); - } - } - delete (yyvsp[-3].s); - (yyval.pEnumList) = (yyvsp[-4].pEnumList); + { + format::skip_token(true, false, tokAt(scanner,(yylsp[0]))); + das_checkName(scanner,*(yyvsp[-3].s),tokAt(scanner,(yylsp[-3]))); + if ( !(yyvsp[-4].pEnumList)->add(*(yyvsp[-3].s),(yyvsp[-1].pExpression),tokAt(scanner,(yylsp[-3]))) ) { + das_yyerror(scanner,"enumeration value already declared " + *(yyvsp[-3].s), tokAt(scanner,(yylsp[-3])), + CompilationError::enumeration_value_already_declared); + } + if ( !yyextra->g_CommentReaders.empty() ) { + auto tokName = tokAt(scanner,(yylsp[-3])); + for ( auto & crd : yyextra->g_CommentReaders ) { + crd->afterEnumerationEntry((yyvsp[-3].s)->c_str(), tokName); + } + } + delete (yyvsp[-3].s); + (yyval.pEnumList) = (yyvsp[-4].pEnumList); } break; @@ -10450,62 +10452,62 @@ YYLTYPE yylloc = yyloc_default; break; case 676: /* $@43: %empty */ - { - if ( !yyextra->g_CommentReaders.empty() ) { - auto pubename = tokAt(scanner,(yylsp[0])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeAlias(pubename); - } + { + if ( !yyextra->g_CommentReaders.empty() ) { + auto pubename = tokAt(scanner,(yylsp[0])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeAlias(pubename); + } } break; case 677: /* single_alias: optional_public_or_private_alias "name" $@43 '=' type_declaration */ - { - das_checkName(scanner,*(yyvsp[-3].s),tokAt(scanner,(yylsp[-3]))); - (yyvsp[0].pTypeDecl)->isPrivateAlias = !(yyvsp[-4].b); - if ( (yyvsp[0].pTypeDecl)->baseType == Type::alias ) { - das_yyerror(scanner,"alias cannot be defined in terms of another alias "+*(yyvsp[-3].s),tokAt(scanner,(yylsp[-3])), - CompilationError::invalid_type); - } - (yyvsp[0].pTypeDecl)->alias = *(yyvsp[-3].s); - if ( !yyextra->g_Program->addAlias((yyvsp[0].pTypeDecl)) ) { - das_yyerror(scanner,"type alias is already defined "+*(yyvsp[-3].s),tokAt(scanner,(yylsp[-3])), - CompilationError::type_alias_already_declared); - } - if ( !yyextra->g_CommentReaders.empty() ) { - auto pubename = tokAt(scanner,(yylsp[0])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->afterAlias((yyvsp[-3].s)->c_str(),pubename); - } - if ((yylsp[-4]).first_column == (yylsp[-4]).last_column) { - (yyloc).first_line = (yylsp[-3]).first_line; - (yyloc).first_column = (yylsp[-3]).first_column; - } - delete (yyvsp[-3].s); + { + das_checkName(scanner,*(yyvsp[-3].s),tokAt(scanner,(yylsp[-3]))); + (yyvsp[0].pTypeDecl)->isPrivateAlias = !(yyvsp[-4].b); + if ( (yyvsp[0].pTypeDecl)->baseType == Type::alias ) { + das_yyerror(scanner,"alias cannot be defined in terms of another alias "+*(yyvsp[-3].s),tokAt(scanner,(yylsp[-3])), + CompilationError::invalid_type); + } + (yyvsp[0].pTypeDecl)->alias = *(yyvsp[-3].s); + if ( !yyextra->g_Program->addAlias((yyvsp[0].pTypeDecl)) ) { + das_yyerror(scanner,"type alias is already defined "+*(yyvsp[-3].s),tokAt(scanner,(yylsp[-3])), + CompilationError::type_alias_already_declared); + } + if ( !yyextra->g_CommentReaders.empty() ) { + auto pubename = tokAt(scanner,(yylsp[0])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->afterAlias((yyvsp[-3].s)->c_str(),pubename); + } + if ((yylsp[-4]).first_column == (yylsp[-4]).last_column) { + (yyloc).first_line = (yylsp[-3]).first_line; + (yyloc).first_column = (yylsp[-3]).first_column; + } + delete (yyvsp[-3].s); } break; case 678: /* alias_list: single_alias opt_sem */ - { - (yyval.positions) = new vector(1, tokAt(scanner, (yylsp[-1]))); + { + (yyval.positions) = new vector(1, tokAt(scanner, (yylsp[-1]))); } break; case 679: /* alias_list: alias_list single_alias opt_sem */ - { - (yyvsp[-2].positions)->emplace_back(tokAt(scanner, (yylsp[-1]))); - (yyval.positions) = (yyvsp[-2].positions); + { + (yyvsp[-2].positions)->emplace_back(tokAt(scanner, (yylsp[-1]))); + (yyval.positions) = (yyvsp[-2].positions); } break; case 680: /* alias_declaration: "typedef" open_block alias_list close_block */ - { - if (format::is_replace_braces() && format::prepare_rule(format::Pos::from(tokAt(scanner, (yylsp[-3]))))) { - // todo: comments here and all such places, same rule - for (const auto single: *(yyvsp[-1].positions)) { - format::get_writer() << "typedef " << format::get_substring(single) << '\n'; - } - format::finish_rule(format::Pos::from_last(tokAt(scanner, (yylsp[0])))); - } - + { + if (format::is_replace_braces() && format::prepare_rule(format::Pos::from(tokAt(scanner, (yylsp[-3]))))) { + // todo: comments here and all such places, same rule + for (const auto single: *(yyvsp[-1].positions)) { + format::get_writer() << "typedef " << format::get_substring(single) << '\n'; + } + format::finish_rule(format::Pos::from_last(tokAt(scanner, (yylsp[0])))); + } + } break; @@ -10526,58 +10528,58 @@ YYLTYPE yylloc = yyloc_default; break; case 686: /* enum_name: "name" */ - { - if ( !yyextra->g_CommentReaders.empty() ) { - auto pubename = tokAt(scanner,(yylsp[0])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeEnumeration(pubename); - } - (yyval.pEnum) = ast_addEmptyEnum(scanner, (yyvsp[0].s), tokAt(scanner,(yylsp[0]))); + { + if ( !yyextra->g_CommentReaders.empty() ) { + auto pubename = tokAt(scanner,(yylsp[0])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeEnumeration(pubename); + } + (yyval.pEnum) = ast_addEmptyEnum(scanner, (yyvsp[0].s), tokAt(scanner,(yylsp[0]))); } break; case 687: /* enum_declaration: optional_annotation_list "enum" optional_public_or_private_enum enum_name open_block enum_list close_block */ - { - if ( !yyextra->g_CommentReaders.empty() ) { - auto tak = tokAt(scanner,(yylsp[-3])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeEnumerationEntries(tak); - } - if ( !yyextra->g_CommentReaders.empty() ) { - auto tak = tokAt(scanner,(yylsp[-1])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->afterEnumerationEntries(tak); - } - const auto first_loc = format::Pos::from(tokAt(scanner,(yylsp[-2]))); - handle_brace(first_loc, (yyvsp[-2].ui), - format::get_substring(first_loc, format::Pos::from_last(tokAt(scanner,(yylsp[-1])))), - yyextra->das_tab_size, - format::Pos::from_last(tokAt(scanner,(yylsp[-1])))); - if ( !yyextra->g_CommentReaders.empty() ) { - auto pubename = tokAt(scanner,(yylsp[-1])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->afterEnumeration((yyvsp[-3].pEnum)->name.c_str(),pubename); - } - ast_enumDeclaration(scanner,(yyvsp[-6].faList),tokAt(scanner,(yylsp[-6])),(yyvsp[-4].b),(yyvsp[-3].pEnum),(yyvsp[-1].pEnumList),Type::tInt); + { + if ( !yyextra->g_CommentReaders.empty() ) { + auto tak = tokAt(scanner,(yylsp[-3])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeEnumerationEntries(tak); + } + if ( !yyextra->g_CommentReaders.empty() ) { + auto tak = tokAt(scanner,(yylsp[-1])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->afterEnumerationEntries(tak); + } + const auto first_loc = format::Pos::from(tokAt(scanner,(yylsp[-2]))); + handle_brace(first_loc, (yyvsp[-2].ui), + format::get_substring(first_loc, format::Pos::from_last(tokAt(scanner,(yylsp[-1])))), + yyextra->das_tab_size, + format::Pos::from_last(tokAt(scanner,(yylsp[-1])))); + if ( !yyextra->g_CommentReaders.empty() ) { + auto pubename = tokAt(scanner,(yylsp[-1])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->afterEnumeration((yyvsp[-3].pEnum)->name.c_str(),pubename); + } + ast_enumDeclaration(scanner,(yyvsp[-6].faList),tokAt(scanner,(yylsp[-6])),(yyvsp[-4].b),(yyvsp[-3].pEnum),(yyvsp[-1].pEnumList),Type::tInt); } break; case 688: /* enum_declaration: optional_annotation_list "enum" optional_public_or_private_enum enum_name ':' enum_basic_type_declaration open_block enum_list close_block */ - { - if ( !yyextra->g_CommentReaders.empty() ) { - auto tak = tokAt(scanner,(yylsp[-5])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeEnumerationEntries(tak); - } - if ( !yyextra->g_CommentReaders.empty() ) { - auto tak = tokAt(scanner,(yylsp[-1])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->afterEnumerationEntries(tak); - } - const auto first_loc = format::Pos::from(tokAt(scanner,(yylsp[-2]))); - handle_brace(first_loc, (yyvsp[-2].ui), - format::get_substring(first_loc, format::Pos::from_last(tokAt(scanner,(yylsp[-1])))), - yyextra->das_tab_size, - format::Pos::from_last(tokAt(scanner,(yylsp[-1])))); - if ( !yyextra->g_CommentReaders.empty() ) { - auto pubename = tokAt(scanner,(yylsp[-1])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->afterEnumeration((yyvsp[-5].pEnum)->name.c_str(),pubename); - } - ast_enumDeclaration(scanner,(yyvsp[-8].faList),tokAt(scanner,(yylsp[-8])),(yyvsp[-6].b),(yyvsp[-5].pEnum),(yyvsp[-1].pEnumList),(yyvsp[-3].type)); + { + if ( !yyextra->g_CommentReaders.empty() ) { + auto tak = tokAt(scanner,(yylsp[-5])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeEnumerationEntries(tak); + } + if ( !yyextra->g_CommentReaders.empty() ) { + auto tak = tokAt(scanner,(yylsp[-1])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->afterEnumerationEntries(tak); + } + const auto first_loc = format::Pos::from(tokAt(scanner,(yylsp[-2]))); + handle_brace(first_loc, (yyvsp[-2].ui), + format::get_substring(first_loc, format::Pos::from_last(tokAt(scanner,(yylsp[-1])))), + yyextra->das_tab_size, + format::Pos::from_last(tokAt(scanner,(yylsp[-1])))); + if ( !yyextra->g_CommentReaders.empty() ) { + auto pubename = tokAt(scanner,(yylsp[-1])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->afterEnumeration((yyvsp[-5].pEnum)->name.c_str(),pubename); + } + ast_enumDeclaration(scanner,(yyvsp[-8].faList),tokAt(scanner,(yylsp[-8])),(yyvsp[-6].b),(yyvsp[-5].pEnum),(yyvsp[-1].pEnumList),(yyvsp[-3].type)); } break; @@ -10598,8 +10600,8 @@ YYLTYPE yylloc = yyloc_default; break; case 693: /* structure_name: optional_sealed "name" optional_structure_parent */ - { - (yyval.pStructure) = ast_structureName(scanner,(yyvsp[-2].b),(yyvsp[-1].s),tokAt(scanner,(yylsp[-1])),(yyvsp[0].s),tokAt(scanner,(yylsp[0]))); + { + (yyval.pStructure) = ast_structureName(scanner,(yyvsp[-2].b),(yyvsp[-1].s),tokAt(scanner,(yylsp[-1])),(yyvsp[0].s),tokAt(scanner,(yylsp[0]))); } break; @@ -10632,102 +10634,102 @@ YYLTYPE yylloc = yyloc_default; break; case 701: /* optional_struct_variable_declaration_list: %empty */ - { - (yyval.pVarDeclList) = new vector(); + { + (yyval.pVarDeclList) = new vector(); } break; case 702: /* optional_struct_variable_declaration_list: open_block struct_variable_declaration_list close_block */ - { - const auto prev_loc = format::Pos::from(tokAt(scanner,(yylsp[-2]))); - handle_brace(prev_loc, (yyvsp[-2].ui), - format::get_substring(prev_loc, format::Pos::from_last(tokAt(scanner,(yylsp[-1])))), - yyextra->das_tab_size, - format::Pos::from_last(tokAt(scanner,(yylsp[-1])))); - (yyval.pVarDeclList) = (yyvsp[-1].pVarDeclList); + { + const auto prev_loc = format::Pos::from(tokAt(scanner,(yylsp[-2]))); + handle_brace(prev_loc, (yyvsp[-2].ui), + format::get_substring(prev_loc, format::Pos::from_last(tokAt(scanner,(yylsp[-1])))), + yyextra->das_tab_size, + format::Pos::from_last(tokAt(scanner,(yylsp[-1])))); + (yyval.pVarDeclList) = (yyvsp[-1].pVarDeclList); } break; case 703: /* $@45: %empty */ - { - if ( !yyextra->g_CommentReaders.empty() ) { - auto tak = tokAt(scanner,(yylsp[-1])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeStructure(tak); - } + { + if ( !yyextra->g_CommentReaders.empty() ) { + auto tak = tokAt(scanner,(yylsp[-1])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeStructure(tak); + } } break; case 704: /* $@46: %empty */ - { - if ( (yyvsp[0].pStructure) ) { - (yyvsp[0].pStructure)->isClass = (yyvsp[-3].i)==CorS_Class || (yyvsp[-3].i)==CorS_ClassTemplate; - (yyvsp[0].pStructure)->isTemplate = (yyvsp[-3].i)==CorS_ClassTemplate || (yyvsp[-3].i)==CorS_StructTemplate; - (yyvsp[0].pStructure)->privateStructure = !(yyvsp[-2].b); - } + { + if ( (yyvsp[0].pStructure) ) { + (yyvsp[0].pStructure)->isClass = (yyvsp[-3].i)==CorS_Class || (yyvsp[-3].i)==CorS_ClassTemplate; + (yyvsp[0].pStructure)->isTemplate = (yyvsp[-3].i)==CorS_ClassTemplate || (yyvsp[-3].i)==CorS_StructTemplate; + (yyvsp[0].pStructure)->privateStructure = !(yyvsp[-2].b); + } } break; case 705: /* structure_declaration: optional_annotation_list class_or_struct optional_public_or_private_structure $@45 structure_name $@46 optional_struct_variable_declaration_list */ - { - if ( (yyvsp[-2].pStructure) ) { - ast_structureDeclaration ( scanner, (yyvsp[-6].faList), tokAt(scanner,(yylsp[-5])), (yyvsp[-2].pStructure), tokAt(scanner,(yylsp[-2])), (yyvsp[0].pVarDeclList) ); - if ( !yyextra->g_CommentReaders.empty() ) { - auto tak = tokAt(scanner,(yylsp[-5])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->afterStructure((yyvsp[-2].pStructure),tak); - } - } else { - deleteVariableDeclarationList((yyvsp[0].pVarDeclList)); - } + { + if ( (yyvsp[-2].pStructure) ) { + ast_structureDeclaration ( scanner, (yyvsp[-6].faList), tokAt(scanner,(yylsp[-5])), (yyvsp[-2].pStructure), tokAt(scanner,(yylsp[-2])), (yyvsp[0].pVarDeclList) ); + if ( !yyextra->g_CommentReaders.empty() ) { + auto tak = tokAt(scanner,(yylsp[-5])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->afterStructure((yyvsp[-2].pStructure),tak); + } + } else { + deleteVariableDeclarationList((yyvsp[0].pVarDeclList)); + } } break; case 706: /* variable_name_with_pos_list: "name" */ - { - das_checkName(scanner,*(yyvsp[0].s),tokAt(scanner,(yylsp[0]))); - auto pSL = new vector(); - pSL->push_back(VariableNameAndPosition(*(yyvsp[0].s),"",tokAt(scanner,(yylsp[0])))); - (yyval.pNameWithPosList) = pSL; - delete (yyvsp[0].s); + { + das_checkName(scanner,*(yyvsp[0].s),tokAt(scanner,(yylsp[0]))); + auto pSL = new vector(); + pSL->push_back(VariableNameAndPosition(*(yyvsp[0].s),"",tokAt(scanner,(yylsp[0])))); + (yyval.pNameWithPosList) = pSL; + delete (yyvsp[0].s); } break; case 707: /* variable_name_with_pos_list: "$i" '(' expr2 ')' */ - { - auto pSL = new vector(); - pSL->push_back(VariableNameAndPosition("``MACRO``TAG``","",tokAt(scanner,(yylsp[-1])),(yyvsp[-1].pExpression))); - (yyval.pNameWithPosList) = pSL; + { + auto pSL = new vector(); + pSL->push_back(VariableNameAndPosition("``MACRO``TAG``","",tokAt(scanner,(yylsp[-1])),(yyvsp[-1].pExpression))); + (yyval.pNameWithPosList) = pSL; } break; case 708: /* variable_name_with_pos_list: "name" "aka" "name" */ - { - das_checkName(scanner,*(yyvsp[-2].s),tokAt(scanner,(yylsp[-2]))); - das_checkName(scanner,*(yyvsp[0].s),tokAt(scanner,(yylsp[0]))); - auto pSL = new vector(); - pSL->push_back(VariableNameAndPosition(*(yyvsp[-2].s),*(yyvsp[0].s),tokAt(scanner,(yylsp[-2])))); - (yyval.pNameWithPosList) = pSL; - delete (yyvsp[-2].s); - delete (yyvsp[0].s); + { + das_checkName(scanner,*(yyvsp[-2].s),tokAt(scanner,(yylsp[-2]))); + das_checkName(scanner,*(yyvsp[0].s),tokAt(scanner,(yylsp[0]))); + auto pSL = new vector(); + pSL->push_back(VariableNameAndPosition(*(yyvsp[-2].s),*(yyvsp[0].s),tokAt(scanner,(yylsp[-2])))); + (yyval.pNameWithPosList) = pSL; + delete (yyvsp[-2].s); + delete (yyvsp[0].s); } break; case 709: /* variable_name_with_pos_list: variable_name_with_pos_list ',' "name" */ - { - das_checkName(scanner,*(yyvsp[0].s),tokAt(scanner,(yylsp[0]))); - (yyvsp[-2].pNameWithPosList)->push_back(VariableNameAndPosition(*(yyvsp[0].s),"",tokAt(scanner,(yylsp[0])))); - (yyval.pNameWithPosList) = (yyvsp[-2].pNameWithPosList); - delete (yyvsp[0].s); + { + das_checkName(scanner,*(yyvsp[0].s),tokAt(scanner,(yylsp[0]))); + (yyvsp[-2].pNameWithPosList)->push_back(VariableNameAndPosition(*(yyvsp[0].s),"",tokAt(scanner,(yylsp[0])))); + (yyval.pNameWithPosList) = (yyvsp[-2].pNameWithPosList); + delete (yyvsp[0].s); } break; case 710: /* variable_name_with_pos_list: variable_name_with_pos_list ',' "name" "aka" "name" */ - { - das_checkName(scanner,*(yyvsp[-2].s),tokAt(scanner,(yylsp[-2]))); - das_checkName(scanner,*(yyvsp[0].s),tokAt(scanner,(yylsp[0]))); - (yyvsp[-4].pNameWithPosList)->push_back(VariableNameAndPosition(*(yyvsp[-2].s),*(yyvsp[0].s),tokAt(scanner,(yylsp[-2])))); - (yyval.pNameWithPosList) = (yyvsp[-4].pNameWithPosList); - delete (yyvsp[-2].s); - delete (yyvsp[0].s); + { + das_checkName(scanner,*(yyvsp[-2].s),tokAt(scanner,(yylsp[-2]))); + das_checkName(scanner,*(yyvsp[0].s),tokAt(scanner,(yylsp[0]))); + (yyvsp[-4].pNameWithPosList)->push_back(VariableNameAndPosition(*(yyvsp[-2].s),*(yyvsp[0].s),tokAt(scanner,(yylsp[-2])))); + (yyval.pNameWithPosList) = (yyvsp[-4].pNameWithPosList); + delete (yyvsp[-2].s); + delete (yyvsp[0].s); } break; @@ -10872,160 +10874,160 @@ YYLTYPE yylloc = yyloc_default; break; case 746: /* structure_type_declaration: name_in_namespace */ - { - (yyval.pTypeDecl) = yyextra->g_Program->makeTypeDeclaration(tokAt(scanner,(yylsp[0])),*(yyvsp[0].s)); - if ( !(yyval.pTypeDecl) ) { - (yyval.pTypeDecl) = new TypeDecl(Type::tVoid); - (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[0])); - } - delete (yyvsp[0].s); + { + (yyval.pTypeDecl) = yyextra->g_Program->makeTypeDeclaration(tokAt(scanner,(yylsp[0])),*(yyvsp[0].s)); + if ( !(yyval.pTypeDecl) ) { + (yyval.pTypeDecl) = new TypeDecl(Type::tVoid); + (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[0])); + } + delete (yyvsp[0].s); } break; case 747: /* auto_type_declaration: "auto" */ - { - (yyval.pTypeDecl) = new TypeDecl(Type::autoinfer); - (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[0])); + { + (yyval.pTypeDecl) = new TypeDecl(Type::autoinfer); + (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[0])); } break; case 748: /* auto_type_declaration: "auto" '(' "name" ')' */ - { - das_checkName(scanner,*(yyvsp[-1].s),tokAt(scanner,(yylsp[-1]))); - (yyval.pTypeDecl) = new TypeDecl(Type::autoinfer); - (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-3])); - (yyval.pTypeDecl)->alias = *(yyvsp[-1].s); - delete (yyvsp[-1].s); + { + das_checkName(scanner,*(yyvsp[-1].s),tokAt(scanner,(yylsp[-1]))); + (yyval.pTypeDecl) = new TypeDecl(Type::autoinfer); + (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-3])); + (yyval.pTypeDecl)->alias = *(yyvsp[-1].s); + delete (yyvsp[-1].s); } break; case 749: /* auto_type_declaration: "$t" '(' expr2 ')' */ - { - (yyval.pTypeDecl) = new TypeDecl(Type::alias); - (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-3])); - (yyval.pTypeDecl)->alias = "``MACRO``TAG``"; - (yyval.pTypeDecl)->isTag = true; - (yyval.pTypeDecl)->firstType = new TypeDecl(Type::autoinfer); - (yyval.pTypeDecl)->firstType->at = tokAt(scanner, (yylsp[-1])); - (yyval.pTypeDecl)->firstType->dimExpr.push_back((yyvsp[-1].pExpression)); + { + (yyval.pTypeDecl) = new TypeDecl(Type::alias); + (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-3])); + (yyval.pTypeDecl)->alias = "``MACRO``TAG``"; + (yyval.pTypeDecl)->isTag = true; + (yyval.pTypeDecl)->firstType = new TypeDecl(Type::autoinfer); + (yyval.pTypeDecl)->firstType->at = tokAt(scanner, (yylsp[-1])); + (yyval.pTypeDecl)->firstType->dimExpr.push_back((yyvsp[-1].pExpression)); } break; case 750: /* bitfield_bits: "name" */ - { - das_checkName(scanner,*(yyvsp[0].s),tokAt(scanner,(yylsp[0]))); - auto pSL = new vector(); - pSL->push_back(*(yyvsp[0].s)); - (yyval.pNameList) = pSL; - delete (yyvsp[0].s); + { + das_checkName(scanner,*(yyvsp[0].s),tokAt(scanner,(yylsp[0]))); + auto pSL = new vector(); + pSL->push_back(*(yyvsp[0].s)); + (yyval.pNameList) = pSL; + delete (yyvsp[0].s); } break; case 751: /* bitfield_bits: bitfield_bits semicolon "name" */ - { - das_checkName(scanner,*(yyvsp[0].s),tokAt(scanner,(yylsp[0]))); - (yyvsp[-2].pNameList)->push_back(*(yyvsp[0].s)); - (yyval.pNameList) = (yyvsp[-2].pNameList); - delete (yyvsp[0].s); + { + das_checkName(scanner,*(yyvsp[0].s),tokAt(scanner,(yylsp[0]))); + (yyvsp[-2].pNameList)->push_back(*(yyvsp[0].s)); + (yyval.pNameList) = (yyvsp[-2].pNameList); + delete (yyvsp[0].s); } break; case 752: /* bitfield_bits: bitfield_bits ',' "name" */ - { - das_checkName(scanner,*(yyvsp[0].s),tokAt(scanner,(yylsp[0]))); - (yyvsp[-2].pNameList)->push_back(*(yyvsp[0].s)); - (yyval.pNameList) = (yyvsp[-2].pNameList); - delete (yyvsp[0].s); + { + das_checkName(scanner,*(yyvsp[0].s),tokAt(scanner,(yylsp[0]))); + (yyvsp[-2].pNameList)->push_back(*(yyvsp[0].s)); + (yyval.pNameList) = (yyvsp[-2].pNameList); + delete (yyvsp[0].s); } break; case 755: /* bitfield_alias_bits: %empty */ - { - auto pSL = new vector>(); - (yyval.pNameExprList) = pSL; - + { + auto pSL = new vector>(); + (yyval.pNameExprList) = pSL; + } break; case 756: /* bitfield_alias_bits: bitfield_alias_bits "name" SEMICOLON */ - { - if (format::enum_bitfield_with_comma() && format::is_replace_braces() && format::prepare_rule(format::Pos::from_last(tokAt(scanner,(yylsp[-1]))))) { - format::get_writer() << ","; - format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[-1])))); - } - das_checkName(scanner,*(yyvsp[-1].s),tokAt(scanner,(yylsp[-1]))); - (yyval.pNameExprList) = (yyvsp[-2].pNameExprList); - (yyval.pNameExprList)->emplace_back(*(yyvsp[-1].s),nullptr); - if ( !yyextra->g_CommentReaders.empty() ) { - auto atvname = tokAt(scanner,(yylsp[-1])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->afterBitfieldEntry((yyvsp[-1].s)->c_str(),atvname); - } - delete (yyvsp[-1].s); + { + if (format::enum_bitfield_with_comma() && format::is_replace_braces() && format::prepare_rule(format::Pos::from_last(tokAt(scanner,(yylsp[-1]))))) { + format::get_writer() << ","; + format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[-1])))); + } + das_checkName(scanner,*(yyvsp[-1].s),tokAt(scanner,(yylsp[-1]))); + (yyval.pNameExprList) = (yyvsp[-2].pNameExprList); + (yyval.pNameExprList)->emplace_back(*(yyvsp[-1].s),nullptr); + if ( !yyextra->g_CommentReaders.empty() ) { + auto atvname = tokAt(scanner,(yylsp[-1])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->afterBitfieldEntry((yyvsp[-1].s)->c_str(),atvname); + } + delete (yyvsp[-1].s); } break; case 757: /* bitfield_alias_bits: bitfield_alias_bits "name" commas */ - { - das_checkName(scanner,*(yyvsp[-1].s),tokAt(scanner,(yylsp[-1]))); - (yyval.pNameExprList) = (yyvsp[-2].pNameExprList); - (yyval.pNameExprList)->emplace_back(*(yyvsp[-1].s),nullptr); - if ( !yyextra->g_CommentReaders.empty() ) { - auto atvname = tokAt(scanner,(yylsp[-1])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->afterBitfieldEntry((yyvsp[-1].s)->c_str(),atvname); - } - delete (yyvsp[-1].s); + { + das_checkName(scanner,*(yyvsp[-1].s),tokAt(scanner,(yylsp[-1]))); + (yyval.pNameExprList) = (yyvsp[-2].pNameExprList); + (yyval.pNameExprList)->emplace_back(*(yyvsp[-1].s),nullptr); + if ( !yyextra->g_CommentReaders.empty() ) { + auto atvname = tokAt(scanner,(yylsp[-1])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->afterBitfieldEntry((yyvsp[-1].s)->c_str(),atvname); + } + delete (yyvsp[-1].s); } break; case 758: /* bitfield_alias_bits: bitfield_alias_bits "name" */ - { - das_checkName(scanner,*(yyvsp[0].s),tokAt(scanner,(yylsp[0]))); - (yyval.pNameExprList) = (yyvsp[-1].pNameExprList); - (yyval.pNameExprList)->emplace_back(*(yyvsp[0].s),nullptr); - if ( !yyextra->g_CommentReaders.empty() ) { - auto atvname = tokAt(scanner,(yylsp[0])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->afterBitfieldEntry((yyvsp[0].s)->c_str(),atvname); - } - delete (yyvsp[0].s); + { + das_checkName(scanner,*(yyvsp[0].s),tokAt(scanner,(yylsp[0]))); + (yyval.pNameExprList) = (yyvsp[-1].pNameExprList); + (yyval.pNameExprList)->emplace_back(*(yyvsp[0].s),nullptr); + if ( !yyextra->g_CommentReaders.empty() ) { + auto atvname = tokAt(scanner,(yylsp[0])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->afterBitfieldEntry((yyvsp[0].s)->c_str(),atvname); + } + delete (yyvsp[0].s); } break; case 759: /* bitfield_alias_bits: bitfield_alias_bits "name" '=' expr SEMICOLON */ - { - das_checkName(scanner,*(yyvsp[-3].s),tokAt(scanner,(yylsp[-3]))); - (yyval.pNameExprList) = (yyvsp[-4].pNameExprList); - (yyval.pNameExprList)->emplace_back(*(yyvsp[-3].s),(yyvsp[-1].pExpression)); - if ( !yyextra->g_CommentReaders.empty() ) { - auto atvname = tokAt(scanner,(yylsp[-3])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->afterBitfieldEntry((yyvsp[-3].s)->c_str(),atvname); - } - delete (yyvsp[-3].s); + { + das_checkName(scanner,*(yyvsp[-3].s),tokAt(scanner,(yylsp[-3]))); + (yyval.pNameExprList) = (yyvsp[-4].pNameExprList); + (yyval.pNameExprList)->emplace_back(*(yyvsp[-3].s),(yyvsp[-1].pExpression)); + if ( !yyextra->g_CommentReaders.empty() ) { + auto atvname = tokAt(scanner,(yylsp[-3])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->afterBitfieldEntry((yyvsp[-3].s)->c_str(),atvname); + } + delete (yyvsp[-3].s); } break; case 760: /* bitfield_alias_bits: bitfield_alias_bits "name" '=' expr commas */ - { - das_checkName(scanner,*(yyvsp[-3].s),tokAt(scanner,(yylsp[-3]))); - (yyval.pNameExprList) = (yyvsp[-4].pNameExprList); - (yyval.pNameExprList)->emplace_back(*(yyvsp[-3].s),(yyvsp[-1].pExpression)); - if ( !yyextra->g_CommentReaders.empty() ) { - auto atvname = tokAt(scanner,(yylsp[-3])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->afterBitfieldEntry((yyvsp[-3].s)->c_str(),atvname); - } - delete (yyvsp[-3].s); + { + das_checkName(scanner,*(yyvsp[-3].s),tokAt(scanner,(yylsp[-3]))); + (yyval.pNameExprList) = (yyvsp[-4].pNameExprList); + (yyval.pNameExprList)->emplace_back(*(yyvsp[-3].s),(yyvsp[-1].pExpression)); + if ( !yyextra->g_CommentReaders.empty() ) { + auto atvname = tokAt(scanner,(yylsp[-3])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->afterBitfieldEntry((yyvsp[-3].s)->c_str(),atvname); + } + delete (yyvsp[-3].s); } break; case 761: /* bitfield_alias_bits: bitfield_alias_bits "name" '=' expr */ - { - das_checkName(scanner,*(yyvsp[-2].s),tokAt(scanner,(yylsp[-2]))); - (yyval.pNameExprList) = (yyvsp[-3].pNameExprList); - (yyval.pNameExprList)->emplace_back(*(yyvsp[-2].s),(yyvsp[0].pExpression)); - if ( !yyextra->g_CommentReaders.empty() ) { - auto atvname = tokAt(scanner,(yylsp[-2])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->afterBitfieldEntry((yyvsp[-2].s)->c_str(),atvname); - } - delete (yyvsp[-2].s); + { + das_checkName(scanner,*(yyvsp[-2].s),tokAt(scanner,(yylsp[-2]))); + (yyval.pNameExprList) = (yyvsp[-3].pNameExprList); + (yyval.pNameExprList)->emplace_back(*(yyvsp[-2].s),(yyvsp[0].pExpression)); + if ( !yyextra->g_CommentReaders.empty() ) { + auto atvname = tokAt(scanner,(yylsp[-2])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->afterBitfieldEntry((yyvsp[-2].s)->c_str(),atvname); + } + delete (yyvsp[-2].s); } break; @@ -11050,9 +11052,9 @@ YYLTYPE yylloc = yyloc_default; break; case 767: /* bitfield_type_declaration: "bitfield" bitfield_basic_type_declaration '<' '>' */ - { - (yyval.pTypeDecl) = new TypeDecl((yyvsp[-2].type)); - (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-2])); + { + (yyval.pTypeDecl) = new TypeDecl((yyvsp[-2].type)); + (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-2])); } break; @@ -11065,44 +11067,44 @@ YYLTYPE yylloc = yyloc_default; break; case 770: /* bitfield_type_declaration: "bitfield" bitfield_basic_type_declaration '<' $@47 bitfield_bits '>' $@48 */ - { - (yyval.pTypeDecl) = new TypeDecl((yyvsp[-5].type)); - (yyval.pTypeDecl)->argNames = *(yyvsp[-2].pNameList); - auto maxBits = (yyval.pTypeDecl)->maxBitfieldBits(); - if ( (yyval.pTypeDecl)->argNames.size()>maxBits ) { - das_yyerror(scanner,"only " + to_string(maxBits) + " different bits are allowed in a bitfield",tokAt(scanner,(yylsp[-5])), - CompilationError::invalid_type); - } - (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-5])); - delete (yyvsp[-2].pNameList); + { + (yyval.pTypeDecl) = new TypeDecl((yyvsp[-5].type)); + (yyval.pTypeDecl)->argNames = *(yyvsp[-2].pNameList); + auto maxBits = (yyval.pTypeDecl)->maxBitfieldBits(); + if ( (yyval.pTypeDecl)->argNames.size()>maxBits ) { + das_yyerror(scanner,"only " + to_string(maxBits) + " different bits are allowed in a bitfield",tokAt(scanner,(yylsp[-5])), + CompilationError::invalid_type); + } + (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-5])); + delete (yyvsp[-2].pNameList); } break; case 773: /* table_type_pair: type_declaration */ - { - (yyval.aTypePair).firstType = (yyvsp[0].pTypeDecl); - (yyval.aTypePair).secondType = new TypeDecl(Type::tVoid); + { + (yyval.aTypePair).firstType = (yyvsp[0].pTypeDecl); + (yyval.aTypePair).secondType = new TypeDecl(Type::tVoid); } break; case 774: /* table_type_pair: type_declaration c_or_s type_declaration */ - { - (yyval.aTypePair).firstType = (yyvsp[-2].pTypeDecl); - (yyval.aTypePair).secondType = (yyvsp[0].pTypeDecl); + { + (yyval.aTypePair).firstType = (yyvsp[-2].pTypeDecl); + (yyval.aTypePair).secondType = (yyvsp[0].pTypeDecl); } break; case 775: /* dim_list: '[' expr2 ']' */ - { - (yyval.pTypeDecl) = new TypeDecl(Type::autoinfer); - appendDimExpr((yyval.pTypeDecl), (yyvsp[-1].pExpression)); + { + (yyval.pTypeDecl) = new TypeDecl(Type::autoinfer); + appendDimExpr((yyval.pTypeDecl), (yyvsp[-1].pExpression)); } break; case 776: /* dim_list: dim_list '[' expr2 ']' */ - { - (yyval.pTypeDecl) = (yyvsp[-3].pTypeDecl); - appendDimExpr((yyval.pTypeDecl), (yyvsp[-1].pExpression)); + { + (yyval.pTypeDecl) = (yyvsp[-3].pTypeDecl); + appendDimExpr((yyval.pTypeDecl), (yyvsp[-1].pExpression)); } break; @@ -11123,29 +11125,29 @@ YYLTYPE yylloc = yyloc_default; break; case 781: /* type_declaration_no_options: type_declaration_no_options dim_list */ - { - if ( (yyvsp[-1].pTypeDecl)->baseType==Type::typeDecl ) { - das_yyerror(scanner,"type declaration can`t be used as array base type",tokAt(scanner,(yylsp[-1])), - CompilationError::invalid_type); - } else if ( (yyvsp[-1].pTypeDecl)->baseType==Type::typeMacro ) { - das_yyerror(scanner,"macro can`t be used as array base type",tokAt(scanner,(yylsp[-1])), - CompilationError::invalid_type); - } - (yyvsp[-1].pTypeDecl)->dim.insert((yyvsp[-1].pTypeDecl)->dim.begin(), (yyvsp[0].pTypeDecl)->dim.begin(), (yyvsp[0].pTypeDecl)->dim.end()); - (yyvsp[-1].pTypeDecl)->dimExpr.insert((yyvsp[-1].pTypeDecl)->dimExpr.begin(), (yyvsp[0].pTypeDecl)->dimExpr.begin(), (yyvsp[0].pTypeDecl)->dimExpr.end()); - (yyvsp[-1].pTypeDecl)->removeDim = false; - (yyval.pTypeDecl) = (yyvsp[-1].pTypeDecl); - (yyvsp[0].pTypeDecl)->dimExpr.clear(); - delete (yyvsp[0].pTypeDecl); + { + if ( (yyvsp[-1].pTypeDecl)->baseType==Type::typeDecl ) { + das_yyerror(scanner,"type declaration can`t be used as array base type",tokAt(scanner,(yylsp[-1])), + CompilationError::invalid_type); + } else if ( (yyvsp[-1].pTypeDecl)->baseType==Type::typeMacro ) { + das_yyerror(scanner,"macro can`t be used as array base type",tokAt(scanner,(yylsp[-1])), + CompilationError::invalid_type); + } + (yyvsp[-1].pTypeDecl)->dim.insert((yyvsp[-1].pTypeDecl)->dim.begin(), (yyvsp[0].pTypeDecl)->dim.begin(), (yyvsp[0].pTypeDecl)->dim.end()); + (yyvsp[-1].pTypeDecl)->dimExpr.insert((yyvsp[-1].pTypeDecl)->dimExpr.begin(), (yyvsp[0].pTypeDecl)->dimExpr.begin(), (yyvsp[0].pTypeDecl)->dimExpr.end()); + (yyvsp[-1].pTypeDecl)->removeDim = false; + (yyval.pTypeDecl) = (yyvsp[-1].pTypeDecl); + (yyvsp[0].pTypeDecl)->dimExpr.clear(); + delete (yyvsp[0].pTypeDecl); } break; case 782: /* type_declaration_no_options: type_declaration_no_options '[' ']' */ - { - (yyvsp[-2].pTypeDecl)->dim.push_back(TypeDecl::dimAuto); - (yyvsp[-2].pTypeDecl)->dimExpr.push_back(nullptr); - (yyvsp[-2].pTypeDecl)->removeDim = false; - (yyval.pTypeDecl) = (yyvsp[-2].pTypeDecl); + { + (yyvsp[-2].pTypeDecl)->dim.push_back(TypeDecl::dimAuto); + (yyvsp[-2].pTypeDecl)->dimExpr.push_back(nullptr); + (yyvsp[-2].pTypeDecl)->removeDim = false; + (yyval.pTypeDecl) = (yyvsp[-2].pTypeDecl); } break; @@ -11158,27 +11160,27 @@ YYLTYPE yylloc = yyloc_default; break; case 785: /* type_declaration_no_options: "type" '<' $@49 type_declaration '>' $@50 */ - { - (yyvsp[-2].pTypeDecl)->autoToAlias = true; - (yyval.pTypeDecl) = (yyvsp[-2].pTypeDecl); + { + (yyvsp[-2].pTypeDecl)->autoToAlias = true; + (yyval.pTypeDecl) = (yyvsp[-2].pTypeDecl); } break; case 786: /* type_declaration_no_options: "typedecl" '(' expr2 ')' */ - { - (yyval.pTypeDecl) = new TypeDecl(Type::typeDecl); - (yyval.pTypeDecl)->at = tokRangeAt(scanner,(yylsp[-3]),(yylsp[-1])); - (yyval.pTypeDecl)->dimExpr.push_back((yyvsp[-1].pExpression)); + { + (yyval.pTypeDecl) = new TypeDecl(Type::typeDecl); + (yyval.pTypeDecl)->at = tokRangeAt(scanner,(yylsp[-3]),(yylsp[-1])); + (yyval.pTypeDecl)->dimExpr.push_back((yyvsp[-1].pExpression)); } break; case 787: /* type_declaration_no_options: '$' name_in_namespace optional_expr_list_in_braces */ - { - (yyval.pTypeDecl) = new TypeDecl(Type::typeMacro); - (yyval.pTypeDecl)->at = tokRangeAt(scanner,(yylsp[-1]), (yylsp[0])); - (yyval.pTypeDecl)->dimExpr = sequenceToList((yyvsp[0].pExpression)); - (yyval.pTypeDecl)->dimExpr.insert((yyval.pTypeDecl)->dimExpr.begin(), new ExprConstString(tokAt(scanner,(yylsp[-1])), *(yyvsp[-1].s))); - delete (yyvsp[-1].s); + { + (yyval.pTypeDecl) = new TypeDecl(Type::typeMacro); + (yyval.pTypeDecl)->at = tokRangeAt(scanner,(yylsp[-1]), (yylsp[0])); + (yyval.pTypeDecl)->dimExpr = sequenceToList((yyvsp[0].pExpression)); + (yyval.pTypeDecl)->dimExpr.insert((yyval.pTypeDecl)->dimExpr.begin(), new ExprConstString(tokAt(scanner,(yylsp[-1])), *(yyvsp[-1].s))); + delete (yyvsp[-1].s); } break; @@ -11187,102 +11189,102 @@ YYLTYPE yylloc = yyloc_default; break; case 789: /* type_declaration_no_options: '$' name_in_namespace '<' $@51 type_declaration_no_options_list '>' optional_expr_list_in_braces */ - { - (yyval.pTypeDecl) = new TypeDecl(Type::typeMacro); - (yyval.pTypeDecl)->at = tokRangeAt(scanner,(yylsp[-5]), (yylsp[0])); - (yyval.pTypeDecl)->dimExpr = typesAndSequenceToList((yyvsp[-2].pTypeDeclList),(yyvsp[0].pExpression)); - (yyval.pTypeDecl)->dimExpr.insert((yyval.pTypeDecl)->dimExpr.begin(), new ExprConstString(tokAt(scanner,(yylsp[-5])), *(yyvsp[-5].s))); - delete (yyvsp[-5].s); + { + (yyval.pTypeDecl) = new TypeDecl(Type::typeMacro); + (yyval.pTypeDecl)->at = tokRangeAt(scanner,(yylsp[-5]), (yylsp[0])); + (yyval.pTypeDecl)->dimExpr = typesAndSequenceToList((yyvsp[-2].pTypeDeclList),(yyvsp[0].pExpression)); + (yyval.pTypeDecl)->dimExpr.insert((yyval.pTypeDecl)->dimExpr.begin(), new ExprConstString(tokAt(scanner,(yylsp[-5])), *(yyvsp[-5].s))); + delete (yyvsp[-5].s); } break; case 790: /* type_declaration_no_options: type_declaration_no_options '-' '[' ']' */ - { - (yyvsp[-3].pTypeDecl)->removeDim = true; - (yyval.pTypeDecl) = (yyvsp[-3].pTypeDecl); + { + (yyvsp[-3].pTypeDecl)->removeDim = true; + (yyval.pTypeDecl) = (yyvsp[-3].pTypeDecl); } break; case 791: /* type_declaration_no_options: type_declaration_no_options "explicit" */ - { - (yyvsp[-1].pTypeDecl)->isExplicit = true; - (yyval.pTypeDecl) = (yyvsp[-1].pTypeDecl); + { + (yyvsp[-1].pTypeDecl)->isExplicit = true; + (yyval.pTypeDecl) = (yyvsp[-1].pTypeDecl); } break; case 792: /* type_declaration_no_options: type_declaration_no_options "const" */ - { - (yyvsp[-1].pTypeDecl)->constant = true; - (yyvsp[-1].pTypeDecl)->removeConstant = false; - (yyval.pTypeDecl) = (yyvsp[-1].pTypeDecl); + { + (yyvsp[-1].pTypeDecl)->constant = true; + (yyvsp[-1].pTypeDecl)->removeConstant = false; + (yyval.pTypeDecl) = (yyvsp[-1].pTypeDecl); } break; case 793: /* type_declaration_no_options: type_declaration_no_options '-' "const" */ - { - (yyvsp[-2].pTypeDecl)->constant = false; - (yyvsp[-2].pTypeDecl)->removeConstant = true; - (yyval.pTypeDecl) = (yyvsp[-2].pTypeDecl); + { + (yyvsp[-2].pTypeDecl)->constant = false; + (yyvsp[-2].pTypeDecl)->removeConstant = true; + (yyval.pTypeDecl) = (yyvsp[-2].pTypeDecl); } break; case 794: /* type_declaration_no_options: type_declaration_no_options '&' */ - { - (yyvsp[-1].pTypeDecl)->ref = true; - (yyvsp[-1].pTypeDecl)->removeRef = false; - (yyval.pTypeDecl) = (yyvsp[-1].pTypeDecl); + { + (yyvsp[-1].pTypeDecl)->ref = true; + (yyvsp[-1].pTypeDecl)->removeRef = false; + (yyval.pTypeDecl) = (yyvsp[-1].pTypeDecl); } break; case 795: /* type_declaration_no_options: type_declaration_no_options '-' '&' */ - { - (yyvsp[-2].pTypeDecl)->ref = false; - (yyvsp[-2].pTypeDecl)->removeRef = true; - (yyval.pTypeDecl) = (yyvsp[-2].pTypeDecl); + { + (yyvsp[-2].pTypeDecl)->ref = false; + (yyvsp[-2].pTypeDecl)->removeRef = true; + (yyval.pTypeDecl) = (yyvsp[-2].pTypeDecl); } break; case 796: /* type_declaration_no_options: type_declaration_no_options '#' */ - { - (yyval.pTypeDecl) = (yyvsp[-1].pTypeDecl); - (yyval.pTypeDecl)->temporary = true; + { + (yyval.pTypeDecl) = (yyvsp[-1].pTypeDecl); + (yyval.pTypeDecl)->temporary = true; } break; case 797: /* type_declaration_no_options: type_declaration_no_options "implicit" */ - { - (yyval.pTypeDecl) = (yyvsp[-1].pTypeDecl); - (yyval.pTypeDecl)->implicit = true; + { + (yyval.pTypeDecl) = (yyvsp[-1].pTypeDecl); + (yyval.pTypeDecl)->implicit = true; } break; case 798: /* type_declaration_no_options: type_declaration_no_options '-' '#' */ - { - (yyvsp[-2].pTypeDecl)->temporary = false; - (yyvsp[-2].pTypeDecl)->removeTemporary = true; - (yyval.pTypeDecl) = (yyvsp[-2].pTypeDecl); + { + (yyvsp[-2].pTypeDecl)->temporary = false; + (yyvsp[-2].pTypeDecl)->removeTemporary = true; + (yyval.pTypeDecl) = (yyvsp[-2].pTypeDecl); } break; case 799: /* type_declaration_no_options: type_declaration_no_options "==" "const" */ - { - (yyvsp[-2].pTypeDecl)->explicitConst = true; - (yyval.pTypeDecl) = (yyvsp[-2].pTypeDecl); + { + (yyvsp[-2].pTypeDecl)->explicitConst = true; + (yyval.pTypeDecl) = (yyvsp[-2].pTypeDecl); } break; case 800: /* type_declaration_no_options: type_declaration_no_options "==" '&' */ - { - (yyvsp[-2].pTypeDecl)->explicitRef = true; - (yyval.pTypeDecl) = (yyvsp[-2].pTypeDecl); + { + (yyvsp[-2].pTypeDecl)->explicitRef = true; + (yyval.pTypeDecl) = (yyvsp[-2].pTypeDecl); } break; case 801: /* type_declaration_no_options: type_declaration_no_options '?' */ - { - (yyval.pTypeDecl) = new TypeDecl(Type::tPointer); - (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-1])); - (yyval.pTypeDecl)->firstType = (yyvsp[-1].pTypeDecl); + { + (yyval.pTypeDecl) = new TypeDecl(Type::tPointer); + (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-1])); + (yyval.pTypeDecl)->firstType = (yyvsp[-1].pTypeDecl); } break; @@ -11295,21 +11297,21 @@ YYLTYPE yylloc = yyloc_default; break; case 804: /* type_declaration_no_options: "smart_ptr" '<' $@52 type_declaration '>' $@53 */ - { - (yyval.pTypeDecl) = new TypeDecl(Type::tPointer); - (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-5])); - (yyval.pTypeDecl)->smartPtr = true; - (yyval.pTypeDecl)->firstType = (yyvsp[-2].pTypeDecl); + { + (yyval.pTypeDecl) = new TypeDecl(Type::tPointer); + (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-5])); + (yyval.pTypeDecl)->smartPtr = true; + (yyval.pTypeDecl)->firstType = (yyvsp[-2].pTypeDecl); } break; case 805: /* type_declaration_no_options: type_declaration_no_options "??" */ - { - (yyval.pTypeDecl) = new TypeDecl(Type::tPointer); - (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-1])); - (yyval.pTypeDecl)->firstType = new TypeDecl(Type::tPointer); - (yyval.pTypeDecl)->firstType->at = tokAt(scanner,(yylsp[-1])); - (yyval.pTypeDecl)->firstType->firstType = (yyvsp[-1].pTypeDecl); + { + (yyval.pTypeDecl) = new TypeDecl(Type::tPointer); + (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-1])); + (yyval.pTypeDecl)->firstType = new TypeDecl(Type::tPointer); + (yyval.pTypeDecl)->firstType->at = tokAt(scanner,(yylsp[-1])); + (yyval.pTypeDecl)->firstType->firstType = (yyvsp[-1].pTypeDecl); } break; @@ -11322,10 +11324,10 @@ YYLTYPE yylloc = yyloc_default; break; case 808: /* type_declaration_no_options: "array" '<' $@54 type_declaration '>' $@55 */ - { - (yyval.pTypeDecl) = new TypeDecl(Type::tArray); - (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-5])); - (yyval.pTypeDecl)->firstType = (yyvsp[-2].pTypeDecl); + { + (yyval.pTypeDecl) = new TypeDecl(Type::tArray); + (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-5])); + (yyval.pTypeDecl)->firstType = (yyvsp[-2].pTypeDecl); } break; @@ -11338,11 +11340,11 @@ YYLTYPE yylloc = yyloc_default; break; case 811: /* type_declaration_no_options: "table" '<' $@56 table_type_pair '>' $@57 */ - { - (yyval.pTypeDecl) = new TypeDecl(Type::tTable); - (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-5])); - (yyval.pTypeDecl)->firstType = (yyvsp[-2].aTypePair).firstType; - (yyval.pTypeDecl)->secondType = (yyvsp[-2].aTypePair).secondType; + { + (yyval.pTypeDecl) = new TypeDecl(Type::tTable); + (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-5])); + (yyval.pTypeDecl)->firstType = (yyvsp[-2].aTypePair).firstType; + (yyval.pTypeDecl)->secondType = (yyvsp[-2].aTypePair).secondType; } break; @@ -11355,18 +11357,18 @@ YYLTYPE yylloc = yyloc_default; break; case 814: /* type_declaration_no_options: "iterator" '<' $@58 type_declaration '>' $@59 */ - { - (yyval.pTypeDecl) = new TypeDecl(Type::tIterator); - (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-5])); - (yyval.pTypeDecl)->firstType = (yyvsp[-2].pTypeDecl); + { + (yyval.pTypeDecl) = new TypeDecl(Type::tIterator); + (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-5])); + (yyval.pTypeDecl)->firstType = (yyvsp[-2].pTypeDecl); } break; case 815: /* type_declaration_no_options: "block" */ - { - (yyval.pTypeDecl) = new TypeDecl(Type::tBlock); - (yyval.pTypeDecl)->firstType = new TypeDecl(Type::tVoid); - (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[0])); + { + (yyval.pTypeDecl) = new TypeDecl(Type::tBlock); + (yyval.pTypeDecl)->firstType = new TypeDecl(Type::tVoid); + (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[0])); } break; @@ -11379,10 +11381,10 @@ YYLTYPE yylloc = yyloc_default; break; case 818: /* type_declaration_no_options: "block" '<' $@60 type_declaration '>' $@61 */ - { - (yyval.pTypeDecl) = new TypeDecl(Type::tBlock); - (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-5])); - (yyval.pTypeDecl)->firstType = (yyvsp[-2].pTypeDecl); + { + (yyval.pTypeDecl) = new TypeDecl(Type::tBlock); + (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-5])); + (yyval.pTypeDecl)->firstType = (yyvsp[-2].pTypeDecl); } break; @@ -11395,22 +11397,22 @@ YYLTYPE yylloc = yyloc_default; break; case 821: /* type_declaration_no_options: "block" '<' $@62 optional_function_argument_list optional_function_type '>' $@63 */ - { - (yyval.pTypeDecl) = new TypeDecl(Type::tBlock); - (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-6])); - (yyval.pTypeDecl)->firstType = (yyvsp[-2].pTypeDecl); - if ( (yyvsp[-3].pVarDeclList) ) { - varDeclToTypeDecl(scanner, (yyval.pTypeDecl), (yyvsp[-3].pVarDeclList)); - deleteVariableDeclarationList((yyvsp[-3].pVarDeclList)); - } + { + (yyval.pTypeDecl) = new TypeDecl(Type::tBlock); + (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-6])); + (yyval.pTypeDecl)->firstType = (yyvsp[-2].pTypeDecl); + if ( (yyvsp[-3].pVarDeclList) ) { + varDeclToTypeDecl(scanner, (yyval.pTypeDecl), (yyvsp[-3].pVarDeclList)); + deleteVariableDeclarationList((yyvsp[-3].pVarDeclList)); + } } break; case 822: /* type_declaration_no_options: "function" */ - { - (yyval.pTypeDecl) = new TypeDecl(Type::tFunction); - (yyval.pTypeDecl)->firstType = new TypeDecl(Type::tVoid); - (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[0])); + { + (yyval.pTypeDecl) = new TypeDecl(Type::tFunction); + (yyval.pTypeDecl)->firstType = new TypeDecl(Type::tVoid); + (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[0])); } break; @@ -11423,10 +11425,10 @@ YYLTYPE yylloc = yyloc_default; break; case 825: /* type_declaration_no_options: "function" '<' $@64 type_declaration '>' $@65 */ - { - (yyval.pTypeDecl) = new TypeDecl(Type::tFunction); - (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-5])); - (yyval.pTypeDecl)->firstType = (yyvsp[-2].pTypeDecl); + { + (yyval.pTypeDecl) = new TypeDecl(Type::tFunction); + (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-5])); + (yyval.pTypeDecl)->firstType = (yyvsp[-2].pTypeDecl); } break; @@ -11439,22 +11441,22 @@ YYLTYPE yylloc = yyloc_default; break; case 828: /* type_declaration_no_options: "function" '<' $@66 optional_function_argument_list optional_function_type '>' $@67 */ - { - (yyval.pTypeDecl) = new TypeDecl(Type::tFunction); - (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-6])); - (yyval.pTypeDecl)->firstType = (yyvsp[-2].pTypeDecl); - if ( (yyvsp[-3].pVarDeclList) ) { - varDeclToTypeDecl(scanner, (yyval.pTypeDecl), (yyvsp[-3].pVarDeclList)); - deleteVariableDeclarationList((yyvsp[-3].pVarDeclList)); - } + { + (yyval.pTypeDecl) = new TypeDecl(Type::tFunction); + (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-6])); + (yyval.pTypeDecl)->firstType = (yyvsp[-2].pTypeDecl); + if ( (yyvsp[-3].pVarDeclList) ) { + varDeclToTypeDecl(scanner, (yyval.pTypeDecl), (yyvsp[-3].pVarDeclList)); + deleteVariableDeclarationList((yyvsp[-3].pVarDeclList)); + } } break; case 829: /* type_declaration_no_options: "lambda" */ - { - (yyval.pTypeDecl) = new TypeDecl(Type::tLambda); - (yyval.pTypeDecl)->firstType = new TypeDecl(Type::tVoid); - (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[0])); + { + (yyval.pTypeDecl) = new TypeDecl(Type::tLambda); + (yyval.pTypeDecl)->firstType = new TypeDecl(Type::tVoid); + (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[0])); } break; @@ -11467,10 +11469,10 @@ YYLTYPE yylloc = yyloc_default; break; case 832: /* type_declaration_no_options: "lambda" '<' $@68 type_declaration '>' $@69 */ - { - (yyval.pTypeDecl) = new TypeDecl(Type::tLambda); - (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-5])); - (yyval.pTypeDecl)->firstType = (yyvsp[-2].pTypeDecl); + { + (yyval.pTypeDecl) = new TypeDecl(Type::tLambda); + (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-5])); + (yyval.pTypeDecl)->firstType = (yyvsp[-2].pTypeDecl); } break; @@ -11483,14 +11485,14 @@ YYLTYPE yylloc = yyloc_default; break; case 835: /* type_declaration_no_options: "lambda" '<' $@70 optional_function_argument_list optional_function_type '>' $@71 */ - { - (yyval.pTypeDecl) = new TypeDecl(Type::tLambda); - (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-6])); - (yyval.pTypeDecl)->firstType = (yyvsp[-2].pTypeDecl); - if ( (yyvsp[-3].pVarDeclList) ) { - varDeclToTypeDecl(scanner, (yyval.pTypeDecl), (yyvsp[-3].pVarDeclList)); - deleteVariableDeclarationList((yyvsp[-3].pVarDeclList)); - } + { + (yyval.pTypeDecl) = new TypeDecl(Type::tLambda); + (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-6])); + (yyval.pTypeDecl)->firstType = (yyvsp[-2].pTypeDecl); + if ( (yyvsp[-3].pVarDeclList) ) { + varDeclToTypeDecl(scanner, (yyval.pTypeDecl), (yyvsp[-3].pVarDeclList)); + deleteVariableDeclarationList((yyvsp[-3].pVarDeclList)); + } } break; @@ -11503,11 +11505,11 @@ YYLTYPE yylloc = yyloc_default; break; case 838: /* type_declaration_no_options: "tuple" '<' $@72 tuple_type_list '>' $@73 */ - { - (yyval.pTypeDecl) = new TypeDecl(Type::tTuple); - (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-5])); - varDeclToTypeDecl(scanner, (yyval.pTypeDecl), (yyvsp[-2].pVarDeclList), true); - deleteVariableDeclarationList((yyvsp[-2].pVarDeclList)); + { + (yyval.pTypeDecl) = new TypeDecl(Type::tTuple); + (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-5])); + varDeclToTypeDecl(scanner, (yyval.pTypeDecl), (yyvsp[-2].pVarDeclList), true); + deleteVariableDeclarationList((yyvsp[-2].pVarDeclList)); } break; @@ -11520,47 +11522,47 @@ YYLTYPE yylloc = yyloc_default; break; case 841: /* type_declaration_no_options: "variant" '<' $@74 variant_type_list '>' $@75 */ - { - (yyval.pTypeDecl) = new TypeDecl(Type::tVariant); - (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-5])); - varDeclToTypeDecl(scanner, (yyval.pTypeDecl), (yyvsp[-2].pVarDeclList), true); - deleteVariableDeclarationList((yyvsp[-2].pVarDeclList)); + { + (yyval.pTypeDecl) = new TypeDecl(Type::tVariant); + (yyval.pTypeDecl)->at = tokAt(scanner,(yylsp[-5])); + varDeclToTypeDecl(scanner, (yyval.pTypeDecl), (yyvsp[-2].pVarDeclList), true); + deleteVariableDeclarationList((yyvsp[-2].pVarDeclList)); } break; case 842: /* type_declaration: type_declaration_no_options */ - { - (yyval.pTypeDecl) = (yyvsp[0].pTypeDecl); + { + (yyval.pTypeDecl) = (yyvsp[0].pTypeDecl); } break; case 843: /* type_declaration: type_declaration '|' type_declaration_no_options */ - { - if ( (yyvsp[-2].pTypeDecl)->baseType==Type::option ) { - (yyval.pTypeDecl) = (yyvsp[-2].pTypeDecl); - (yyval.pTypeDecl)->argTypes.push_back((yyvsp[0].pTypeDecl)); - } else { - (yyval.pTypeDecl) = new TypeDecl(Type::option); - (yyval.pTypeDecl)->at = tokRangeAt(scanner,(yylsp[-2]),(yylsp[0])); - (yyval.pTypeDecl)->argTypes.push_back((yyvsp[-2].pTypeDecl)); - (yyval.pTypeDecl)->argTypes.push_back((yyvsp[0].pTypeDecl)); - } + { + if ( (yyvsp[-2].pTypeDecl)->baseType==Type::option ) { + (yyval.pTypeDecl) = (yyvsp[-2].pTypeDecl); + (yyval.pTypeDecl)->argTypes.push_back((yyvsp[0].pTypeDecl)); + } else { + (yyval.pTypeDecl) = new TypeDecl(Type::option); + (yyval.pTypeDecl)->at = tokRangeAt(scanner,(yylsp[-2]),(yylsp[0])); + (yyval.pTypeDecl)->argTypes.push_back((yyvsp[-2].pTypeDecl)); + (yyval.pTypeDecl)->argTypes.push_back((yyvsp[0].pTypeDecl)); + } } break; case 844: /* type_declaration: type_declaration '|' '#' */ - { - if ( (yyvsp[-2].pTypeDecl)->baseType==Type::option ) { - (yyval.pTypeDecl) = (yyvsp[-2].pTypeDecl); - (yyval.pTypeDecl)->argTypes.push_back(new TypeDecl(*(yyvsp[-2].pTypeDecl)->argTypes.back())); - (yyvsp[-2].pTypeDecl)->argTypes.back()->temporary ^= true; - } else { - (yyval.pTypeDecl) = new TypeDecl(Type::option); - (yyval.pTypeDecl)->at = tokRangeAt(scanner,(yylsp[-2]),(yylsp[0])); - (yyval.pTypeDecl)->argTypes.push_back((yyvsp[-2].pTypeDecl)); - (yyval.pTypeDecl)->argTypes.push_back(new TypeDecl(*(yyvsp[-2].pTypeDecl))); - (yyval.pTypeDecl)->argTypes.back()->temporary ^= true; - } + { + if ( (yyvsp[-2].pTypeDecl)->baseType==Type::option ) { + (yyval.pTypeDecl) = (yyvsp[-2].pTypeDecl); + (yyval.pTypeDecl)->argTypes.push_back(new TypeDecl(*(yyvsp[-2].pTypeDecl)->argTypes.back())); + (yyvsp[-2].pTypeDecl)->argTypes.back()->temporary ^= true; + } else { + (yyval.pTypeDecl) = new TypeDecl(Type::option); + (yyval.pTypeDecl)->at = tokRangeAt(scanner,(yylsp[-2]),(yylsp[0])); + (yyval.pTypeDecl)->argTypes.push_back((yyvsp[-2].pTypeDecl)); + (yyval.pTypeDecl)->argTypes.push_back(new TypeDecl(*(yyvsp[-2].pTypeDecl))); + (yyval.pTypeDecl)->argTypes.back()->temporary ^= true; + } } break; @@ -11569,57 +11571,57 @@ YYLTYPE yylloc = yyloc_default; break; case 846: /* $@77: %empty */ - { - if ( !yyextra->g_CommentReaders.empty() ) { - auto atvname = tokAt(scanner,(yylsp[0])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeTuple(atvname); - } + { + if ( !yyextra->g_CommentReaders.empty() ) { + auto atvname = tokAt(scanner,(yylsp[0])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeTuple(atvname); + } } break; case 847: /* $@78: %empty */ - { - if (format::is_replace_braces() && (yyvsp[0].ui) != 0xdeadbeef && format::prepare_rule(format::Pos::from(tokAt(scanner, (yylsp[0]))))) { - format::get_writer() << " {"; - format::finish_rule(format::Pos::from(tokAt(scanner,(yylsp[0])))); - } - if ( !yyextra->g_CommentReaders.empty() ) { - auto atvname = tokAt(scanner,(yylsp[-2])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeTupleEntries(atvname); - } + { + if (format::is_replace_braces() && (yyvsp[0].ui) != 0xdeadbeef && format::prepare_rule(format::Pos::from(tokAt(scanner, (yylsp[0]))))) { + format::get_writer() << " {"; + format::finish_rule(format::Pos::from(tokAt(scanner,(yylsp[0])))); + } + if ( !yyextra->g_CommentReaders.empty() ) { + auto atvname = tokAt(scanner,(yylsp[-2])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeTupleEntries(atvname); + } } break; case 848: /* $@79: %empty */ - { - if ( !yyextra->g_CommentReaders.empty() ) { - auto atvname = tokAt(scanner,(yylsp[-4])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->afterTupleEntries(atvname); - } + { + if ( !yyextra->g_CommentReaders.empty() ) { + auto atvname = tokAt(scanner,(yylsp[-4])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->afterTupleEntries(atvname); + } } break; case 849: /* tuple_alias_declaration: "tuple" optional_public_or_private_alias $@76 "name" $@77 open_block $@78 tuple_alias_type_list $@79 close_block */ - { - if (format::is_replace_braces() && (yyvsp[-4].ui) != 0xdeadbeef && format::prepare_rule(format::Pos::from(tokAt(scanner, (yylsp[0]))))) { - format::get_writer() << "\n" << string((yyvsp[0].ui) * yyextra->das_tab_size, ' ') + "}"; - format::finish_rule(format::Pos::from(tokAt(scanner,(yylsp[0])))); - } - auto vtype = new TypeDecl(Type::tTuple); - vtype->alias = *(yyvsp[-6].s); - vtype->at = tokAt(scanner,(yylsp[-6])); - vtype->isPrivateAlias = !(yyvsp[-8].b); - varDeclToTypeDecl(scanner, vtype, (yyvsp[-2].pVarDeclList), true); - deleteVariableDeclarationList((yyvsp[-2].pVarDeclList)); - if ( !yyextra->g_Program->addAlias(vtype) ) { - das_yyerror(scanner,"type alias is already defined "+*(yyvsp[-6].s),tokAt(scanner,(yylsp[-6])), - CompilationError::type_alias_already_declared); - } - if ( !yyextra->g_CommentReaders.empty() ) { - auto atvname = tokAt(scanner,(yylsp[-6])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->afterTuple((yyvsp[-6].s)->c_str(),atvname); - } - delete (yyvsp[-6].s); + { + if (format::is_replace_braces() && (yyvsp[-4].ui) != 0xdeadbeef && format::prepare_rule(format::Pos::from(tokAt(scanner, (yylsp[0]))))) { + format::get_writer() << "\n" << string((yyvsp[0].ui) * yyextra->das_tab_size, ' ') + "}"; + format::finish_rule(format::Pos::from(tokAt(scanner,(yylsp[0])))); + } + auto vtype = new TypeDecl(Type::tTuple); + vtype->alias = *(yyvsp[-6].s); + vtype->at = tokAt(scanner,(yylsp[-6])); + vtype->isPrivateAlias = !(yyvsp[-8].b); + varDeclToTypeDecl(scanner, vtype, (yyvsp[-2].pVarDeclList), true); + deleteVariableDeclarationList((yyvsp[-2].pVarDeclList)); + if ( !yyextra->g_Program->addAlias(vtype) ) { + das_yyerror(scanner,"type alias is already defined "+*(yyvsp[-6].s),tokAt(scanner,(yylsp[-6])), + CompilationError::type_alias_already_declared); + } + if ( !yyextra->g_CommentReaders.empty() ) { + auto atvname = tokAt(scanner,(yylsp[-6])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->afterTuple((yyvsp[-6].s)->c_str(),atvname); + } + delete (yyvsp[-6].s); } break; @@ -11628,58 +11630,58 @@ YYLTYPE yylloc = yyloc_default; break; case 851: /* $@81: %empty */ - { - if ( !yyextra->g_CommentReaders.empty() ) { - auto atvname = tokAt(scanner,(yylsp[0])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeVariant(atvname); - } + { + if ( !yyextra->g_CommentReaders.empty() ) { + auto atvname = tokAt(scanner,(yylsp[0])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeVariant(atvname); + } } break; case 852: /* $@82: %empty */ - { - if (format::is_replace_braces() && (yyvsp[0].ui) != 0xdeadbeef && format::prepare_rule(format::Pos::from(tokAt(scanner, (yylsp[0]))))) { - format::get_writer() << " {"; - format::finish_rule(format::Pos::from(tokAt(scanner,(yylsp[0])))); - } - if ( !yyextra->g_CommentReaders.empty() ) { - auto atvname = tokAt(scanner,(yylsp[-2])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeVariantEntries(atvname); - } - + { + if (format::is_replace_braces() && (yyvsp[0].ui) != 0xdeadbeef && format::prepare_rule(format::Pos::from(tokAt(scanner, (yylsp[0]))))) { + format::get_writer() << " {"; + format::finish_rule(format::Pos::from(tokAt(scanner,(yylsp[0])))); + } + if ( !yyextra->g_CommentReaders.empty() ) { + auto atvname = tokAt(scanner,(yylsp[-2])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeVariantEntries(atvname); + } + } break; case 853: /* $@83: %empty */ - { - if ( !yyextra->g_CommentReaders.empty() ) { - auto atvname = tokAt(scanner,(yylsp[-4])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->afterVariantEntries(atvname); - } + { + if ( !yyextra->g_CommentReaders.empty() ) { + auto atvname = tokAt(scanner,(yylsp[-4])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->afterVariantEntries(atvname); + } } break; case 854: /* variant_alias_declaration: "variant" optional_public_or_private_alias $@80 "name" $@81 open_block $@82 variant_alias_type_list $@83 close_block */ - { - if (format::is_replace_braces() && (yyvsp[0].ui) != 0xdeadbeef && format::prepare_rule(format::Pos::from(tokAt(scanner, (yylsp[0]))))) { - format::get_writer() << "\n" << string((yyvsp[0].ui) * yyextra->das_tab_size, ' ') + "}"; - format::finish_rule(format::Pos::from(tokAt(scanner,(yylsp[0])))); - } - auto vtype = new TypeDecl(Type::tVariant); - vtype->alias = *(yyvsp[-6].s); - vtype->at = tokAt(scanner,(yylsp[-6])); - vtype->isPrivateAlias = !(yyvsp[-8].b); - varDeclToTypeDecl(scanner, vtype, (yyvsp[-2].pVarDeclList), true); - deleteVariableDeclarationList((yyvsp[-2].pVarDeclList)); - if ( !yyextra->g_Program->addAlias(vtype) ) { - das_yyerror(scanner,"type alias is already defined "+*(yyvsp[-6].s),tokAt(scanner,(yylsp[-6])), - CompilationError::type_alias_already_declared); - } - if ( !yyextra->g_CommentReaders.empty() ) { - auto atvname = tokAt(scanner,(yylsp[-6])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->afterVariant((yyvsp[-6].s)->c_str(),atvname); - } - delete (yyvsp[-6].s); + { + if (format::is_replace_braces() && (yyvsp[0].ui) != 0xdeadbeef && format::prepare_rule(format::Pos::from(tokAt(scanner, (yylsp[0]))))) { + format::get_writer() << "\n" << string((yyvsp[0].ui) * yyextra->das_tab_size, ' ') + "}"; + format::finish_rule(format::Pos::from(tokAt(scanner,(yylsp[0])))); + } + auto vtype = new TypeDecl(Type::tVariant); + vtype->alias = *(yyvsp[-6].s); + vtype->at = tokAt(scanner,(yylsp[-6])); + vtype->isPrivateAlias = !(yyvsp[-8].b); + varDeclToTypeDecl(scanner, vtype, (yyvsp[-2].pVarDeclList), true); + deleteVariableDeclarationList((yyvsp[-2].pVarDeclList)); + if ( !yyextra->g_Program->addAlias(vtype) ) { + das_yyerror(scanner,"type alias is already defined "+*(yyvsp[-6].s),tokAt(scanner,(yylsp[-6])), + CompilationError::type_alias_already_declared); + } + if ( !yyextra->g_CommentReaders.empty() ) { + auto atvname = tokAt(scanner,(yylsp[-6])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->afterVariant((yyvsp[-6].s)->c_str(),atvname); + } + delete (yyvsp[-6].s); } break; @@ -11688,58 +11690,58 @@ YYLTYPE yylloc = yyloc_default; break; case 856: /* $@85: %empty */ - { - if ( !yyextra->g_CommentReaders.empty() ) { - auto atvname = tokAt(scanner,(yylsp[0])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeBitfield(atvname); - } + { + if ( !yyextra->g_CommentReaders.empty() ) { + auto atvname = tokAt(scanner,(yylsp[0])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeBitfield(atvname); + } } break; case 857: /* bitfield_alias_declaration: "bitfield" optional_public_or_private_alias $@84 "name" $@85 bitfield_basic_type_declaration open_block bitfield_alias_bits close_block */ - { - const auto prev_loc = format::Pos::from(tokAt(scanner,(yylsp[-2]))); - handle_brace(prev_loc, (yyvsp[-2].ui), - format::get_substring(prev_loc, format::Pos::from_last(tokAt(scanner,(yylsp[-1])))), - yyextra->das_tab_size, - format::Pos::from_last(tokAt(scanner,(yylsp[-1])))); - if ( !yyextra->g_CommentReaders.empty() ) { - auto atvname = tokAt(scanner,(yylsp[-5])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeBitfieldEntries(atvname); - } - if ( !yyextra->g_CommentReaders.empty() ) { - auto atvname = tokAt(scanner,(yylsp[-5])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->afterBitfieldEntries(atvname); - } - auto btype = new TypeDecl((yyvsp[-3].type)); - btype->alias = *(yyvsp[-5].s); - btype->at = tokAt(scanner,(yylsp[-5])); - btype->isPrivateAlias = !(yyvsp[-7].b); - for ( auto & p : *(yyvsp[-1].pNameExprList) ) { - if ( !get<1>(p) ) { - btype->argNames.push_back(get<0>(p)); - } - } - auto maxBits = btype->maxBitfieldBits(); - if ( btype->argNames.size()>maxBits ) { - das_yyerror(scanner,"only " + to_string(maxBits) + " different bits are allowed in a bitfield",tokAt(scanner,(yylsp[-5])), - CompilationError::invalid_type); - } - for ( auto & p : *(yyvsp[-1].pNameExprList) ) { - if ( get<1>(p) ) { - ast_globalBitfieldConst ( scanner, btype, (yyvsp[-7].b), get<0>(p), get<1>(p) ); - } - } - if ( !yyextra->g_Program->addAlias(btype) ) { - das_yyerror(scanner,"type alias is already defined "+*(yyvsp[-5].s),tokAt(scanner,(yylsp[-5])), - CompilationError::type_alias_already_declared); - } - if ( !yyextra->g_CommentReaders.empty() ) { - auto atvname = tokAt(scanner,(yylsp[-5])); - for ( auto & crd : yyextra->g_CommentReaders ) crd->afterBitfield((yyvsp[-5].s)->c_str(),atvname); - } - delete (yyvsp[-5].s); - delete (yyvsp[-1].pNameExprList); + { + const auto prev_loc = format::Pos::from(tokAt(scanner,(yylsp[-2]))); + handle_brace(prev_loc, (yyvsp[-2].ui), + format::get_substring(prev_loc, format::Pos::from_last(tokAt(scanner,(yylsp[-1])))), + yyextra->das_tab_size, + format::Pos::from_last(tokAt(scanner,(yylsp[-1])))); + if ( !yyextra->g_CommentReaders.empty() ) { + auto atvname = tokAt(scanner,(yylsp[-5])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->beforeBitfieldEntries(atvname); + } + if ( !yyextra->g_CommentReaders.empty() ) { + auto atvname = tokAt(scanner,(yylsp[-5])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->afterBitfieldEntries(atvname); + } + auto btype = new TypeDecl((yyvsp[-3].type)); + btype->alias = *(yyvsp[-5].s); + btype->at = tokAt(scanner,(yylsp[-5])); + btype->isPrivateAlias = !(yyvsp[-7].b); + for ( auto & p : *(yyvsp[-1].pNameExprList) ) { + if ( !get<1>(p) ) { + btype->argNames.push_back(get<0>(p)); + } + } + auto maxBits = btype->maxBitfieldBits(); + if ( btype->argNames.size()>maxBits ) { + das_yyerror(scanner,"only " + to_string(maxBits) + " different bits are allowed in a bitfield",tokAt(scanner,(yylsp[-5])), + CompilationError::invalid_type); + } + for ( auto & p : *(yyvsp[-1].pNameExprList) ) { + if ( get<1>(p) ) { + ast_globalBitfieldConst ( scanner, btype, (yyvsp[-7].b), get<0>(p), get<1>(p) ); + } + } + if ( !yyextra->g_Program->addAlias(btype) ) { + das_yyerror(scanner,"type alias is already defined "+*(yyvsp[-5].s),tokAt(scanner,(yylsp[-5])), + CompilationError::type_alias_already_declared); + } + if ( !yyextra->g_CommentReaders.empty() ) { + auto atvname = tokAt(scanner,(yylsp[-5])); + for ( auto & crd : yyextra->g_CommentReaders ) crd->afterBitfield((yyvsp[-5].s)->c_str(),atvname); + } + delete (yyvsp[-5].s); + delete (yyvsp[-1].pNameExprList); } break; @@ -11764,142 +11766,142 @@ YYLTYPE yylloc = yyloc_default; break; case 863: /* make_struct_fields: "name" copy_or_move expr */ - { - auto mfd = new MakeFieldDecl(tokRangeAt(scanner,(yylsp[-2]), (yylsp[0])),*(yyvsp[-2].s),(yyvsp[0].pExpression),(yyvsp[-1].b),false); - delete (yyvsp[-2].s); - auto msd = new MakeStruct(); - msd->push_back(mfd); - (yyval.pMakeStruct) = msd; + { + auto mfd = new MakeFieldDecl(tokRangeAt(scanner,(yylsp[-2]), (yylsp[0])),*(yyvsp[-2].s),(yyvsp[0].pExpression),(yyvsp[-1].b),false); + delete (yyvsp[-2].s); + auto msd = new MakeStruct(); + msd->push_back(mfd); + (yyval.pMakeStruct) = msd; } break; case 864: /* make_struct_fields: "name" ":=" expr */ - { - auto mfd = new MakeFieldDecl(tokRangeAt(scanner,(yylsp[-2]), (yylsp[0])),*(yyvsp[-2].s),(yyvsp[0].pExpression),false,true); - delete (yyvsp[-2].s); - auto msd = new MakeStruct(); - msd->push_back(mfd); - (yyval.pMakeStruct) = msd; + { + auto mfd = new MakeFieldDecl(tokRangeAt(scanner,(yylsp[-2]), (yylsp[0])),*(yyvsp[-2].s),(yyvsp[0].pExpression),false,true); + delete (yyvsp[-2].s); + auto msd = new MakeStruct(); + msd->push_back(mfd); + (yyval.pMakeStruct) = msd; } break; case 865: /* make_struct_fields: make_struct_fields ',' "name" copy_or_move expr */ - { - auto mfd = new MakeFieldDecl(tokRangeAt(scanner,(yylsp[-2]), (yylsp[0])),*(yyvsp[-2].s),(yyvsp[0].pExpression),(yyvsp[-1].b),false); - delete (yyvsp[-2].s); - ((MakeStruct *)(yyvsp[-4].pMakeStruct))->push_back(mfd); - (yyval.pMakeStruct) = (yyvsp[-4].pMakeStruct); + { + auto mfd = new MakeFieldDecl(tokRangeAt(scanner,(yylsp[-2]), (yylsp[0])),*(yyvsp[-2].s),(yyvsp[0].pExpression),(yyvsp[-1].b),false); + delete (yyvsp[-2].s); + ((MakeStruct *)(yyvsp[-4].pMakeStruct))->push_back(mfd); + (yyval.pMakeStruct) = (yyvsp[-4].pMakeStruct); } break; case 866: /* make_struct_fields: make_struct_fields ',' "name" ":=" expr */ - { - auto mfd = new MakeFieldDecl(tokRangeAt(scanner,(yylsp[-2]), (yylsp[0])),*(yyvsp[-2].s),(yyvsp[0].pExpression),false,true); - delete (yyvsp[-2].s); - ((MakeStruct *)(yyvsp[-4].pMakeStruct))->push_back(mfd); - (yyval.pMakeStruct) = (yyvsp[-4].pMakeStruct); + { + auto mfd = new MakeFieldDecl(tokRangeAt(scanner,(yylsp[-2]), (yylsp[0])),*(yyvsp[-2].s),(yyvsp[0].pExpression),false,true); + delete (yyvsp[-2].s); + ((MakeStruct *)(yyvsp[-4].pMakeStruct))->push_back(mfd); + (yyval.pMakeStruct) = (yyvsp[-4].pMakeStruct); } break; case 867: /* make_struct_fields: "$f" '(' expr2 ')' copy_or_move expr */ - { - auto mfd = new MakeFieldDecl(tokRangeAt(scanner,(yylsp[-5]), (yylsp[0])),"``MACRO``TAG``FIELD``",(yyvsp[0].pExpression),(yyvsp[-1].b),false); - mfd->tag = (yyvsp[-3].pExpression); - auto msd = new MakeStruct(); - msd->push_back(mfd); - (yyval.pMakeStruct) = msd; + { + auto mfd = new MakeFieldDecl(tokRangeAt(scanner,(yylsp[-5]), (yylsp[0])),"``MACRO``TAG``FIELD``",(yyvsp[0].pExpression),(yyvsp[-1].b),false); + mfd->tag = (yyvsp[-3].pExpression); + auto msd = new MakeStruct(); + msd->push_back(mfd); + (yyval.pMakeStruct) = msd; } break; case 868: /* make_struct_fields: "$f" '(' expr2 ')' ":=" expr */ - { - auto mfd = new MakeFieldDecl(tokRangeAt(scanner, (yylsp[-5]), (yylsp[0])),"``MACRO``TAG``FIELD``",(yyvsp[0].pExpression),false,true); - mfd->tag = (yyvsp[-3].pExpression); - auto msd = new MakeStruct(); - msd->push_back(mfd); - (yyval.pMakeStruct) = msd; + { + auto mfd = new MakeFieldDecl(tokRangeAt(scanner, (yylsp[-5]), (yylsp[0])),"``MACRO``TAG``FIELD``",(yyvsp[0].pExpression),false,true); + mfd->tag = (yyvsp[-3].pExpression); + auto msd = new MakeStruct(); + msd->push_back(mfd); + (yyval.pMakeStruct) = msd; } break; case 869: /* make_struct_fields: make_struct_fields ',' "$f" '(' expr2 ')' copy_or_move expr */ - { - auto mfd = new MakeFieldDecl(tokRangeAt(scanner,(yylsp[-5]),(yylsp[0])),"``MACRO``TAG``FIELD``",(yyvsp[0].pExpression),(yyvsp[-1].b),false); - mfd->tag = (yyvsp[-3].pExpression); - ((MakeStruct *)(yyvsp[-7].pMakeStruct))->push_back(mfd); - (yyval.pMakeStruct) = (yyvsp[-7].pMakeStruct); + { + auto mfd = new MakeFieldDecl(tokRangeAt(scanner,(yylsp[-5]),(yylsp[0])),"``MACRO``TAG``FIELD``",(yyvsp[0].pExpression),(yyvsp[-1].b),false); + mfd->tag = (yyvsp[-3].pExpression); + ((MakeStruct *)(yyvsp[-7].pMakeStruct))->push_back(mfd); + (yyval.pMakeStruct) = (yyvsp[-7].pMakeStruct); } break; case 870: /* make_struct_fields: make_struct_fields ',' "$f" '(' expr2 ')' ":=" expr */ - { - auto mfd = new MakeFieldDecl(tokRangeAt(scanner,(yylsp[-5]), (yylsp[0])),"``MACRO``TAG``FIELD``",(yyvsp[0].pExpression),false,true); - mfd->tag = (yyvsp[-3].pExpression); - ((MakeStruct *)(yyvsp[-7].pMakeStruct))->push_back(mfd); - (yyval.pMakeStruct) = (yyvsp[-7].pMakeStruct); + { + auto mfd = new MakeFieldDecl(tokRangeAt(scanner,(yylsp[-5]), (yylsp[0])),"``MACRO``TAG``FIELD``",(yyvsp[0].pExpression),false,true); + mfd->tag = (yyvsp[-3].pExpression); + ((MakeStruct *)(yyvsp[-7].pMakeStruct))->push_back(mfd); + (yyval.pMakeStruct) = (yyvsp[-7].pMakeStruct); } break; case 871: /* make_variant_dim: %empty */ - { - (yyval.pExpression) = ast_makeStructToMakeVariant(nullptr, LineInfo()); + { + (yyval.pExpression) = ast_makeStructToMakeVariant(nullptr, LineInfo()); } break; case 872: /* make_variant_dim: make_struct_fields */ - { - (yyval.pExpression) = ast_makeStructToMakeVariant((yyvsp[0].pMakeStruct), tokAt(scanner,(yylsp[0]))); + { + (yyval.pExpression) = ast_makeStructToMakeVariant((yyvsp[0].pMakeStruct), tokAt(scanner,(yylsp[0]))); } break; case 873: /* make_struct_single: make_struct_fields optional_comma */ - { - auto msd = new ExprMakeStruct(); - msd->structs.push_back(MakeStructPtr((yyvsp[-1].pMakeStruct))); - (yyval.pExpression) = msd; + { + auto msd = new ExprMakeStruct(); + msd->structs.push_back(MakeStructPtr((yyvsp[-1].pMakeStruct))); + (yyval.pExpression) = msd; } break; case 874: /* make_struct_dim: make_struct_fields */ - { - auto msd = new ExprMakeStruct(); - msd->structs.push_back(MakeStructPtr((yyvsp[0].pMakeStruct))); - (yyval.pExpression) = msd; + { + auto msd = new ExprMakeStruct(); + msd->structs.push_back(MakeStructPtr((yyvsp[0].pMakeStruct))); + (yyval.pExpression) = msd; } break; case 875: /* make_struct_dim: make_struct_dim semicolon make_struct_fields */ - { - ((ExprMakeStruct *) (yyvsp[-2].pExpression))->structs.push_back(MakeStructPtr((yyvsp[0].pMakeStruct))); - (yyval.pExpression) = (yyvsp[-2].pExpression); + { + ((ExprMakeStruct *) (yyvsp[-2].pExpression))->structs.push_back(MakeStructPtr((yyvsp[0].pMakeStruct))); + (yyval.pExpression) = (yyvsp[-2].pExpression); } break; case 876: /* make_struct_dim_list: '(' make_struct_fields ')' */ - { - auto msd = new ExprMakeStruct(); - msd->structs.push_back(MakeStructPtr((yyvsp[-1].pMakeStruct))); - (yyval.pExpression) = msd; + { + auto msd = new ExprMakeStruct(); + msd->structs.push_back(MakeStructPtr((yyvsp[-1].pMakeStruct))); + (yyval.pExpression) = msd; } break; case 877: /* make_struct_dim_list: make_struct_dim_list ',' '(' make_struct_fields ')' */ - { - ((ExprMakeStruct *) (yyvsp[-4].pExpression))->structs.push_back(MakeStructPtr((yyvsp[-1].pMakeStruct))); - (yyval.pExpression) = (yyvsp[-4].pExpression); + { + ((ExprMakeStruct *) (yyvsp[-4].pExpression))->structs.push_back(MakeStructPtr((yyvsp[-1].pMakeStruct))); + (yyval.pExpression) = (yyvsp[-4].pExpression); } break; case 878: /* make_struct_dim_decl: make_struct_fields */ - { - auto msd = new ExprMakeStruct(); - msd->structs.push_back(MakeStructPtr((yyvsp[0].pMakeStruct))); - (yyval.pExpression) = msd; + { + auto msd = new ExprMakeStruct(); + msd->structs.push_back(MakeStructPtr((yyvsp[0].pMakeStruct))); + (yyval.pExpression) = msd; } break; case 879: /* make_struct_dim_decl: make_struct_dim_list optional_comma */ - { - (yyval.pExpression) = (yyvsp[-1].pExpression); + { + (yyval.pExpression) = (yyvsp[-1].pExpression); } break; @@ -11928,172 +11930,172 @@ YYLTYPE yylloc = yyloc_default; break; case 898: /* make_struct_decl: "[[" type_declaration_no_options make_struct_dim optional_block optional_trailing_delim_sqr_sqr */ - { - // std::cout << "case1" << std::endl; - if (format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-4]))))) { - auto type = format::type_to_string((yyvsp[-3].pTypeDecl), tokAt(scanner,(yylsp[-3]))).value_or(""); - const bool is_initialized = false; - const auto before = format::substring_between(tokAt(scanner,(yylsp[-4])), tokAt(scanner, (yylsp[-3]))); - const auto internal = format::handle_msd(tokAt(scanner, (yylsp[-3])), - static_cast((yyvsp[-2].pExpression)), - tokAt(scanner, (yyvsp[-1].pExpression) != nullptr ? (yylsp[-1]) : (yylsp[0])), - type, is_initialized); - if (static_cast((yyvsp[-2].pExpression))->structs.size() == 1) { - // single struct - if (type.find('[') != size_t(-1)) { - format::get_writer() << "fixed_array(" << before << internal << ")"; - } else { - format::get_writer() << before << internal; - } - if ((yyvsp[-1].pExpression) != nullptr) { - format::get_writer() << " <| " << format::get_substring((yyvsp[-1].pExpression)->at); - } - } else { - // array of structs - // const auto internal = format::get_substring(format::Pos::from(tokAt(scanner,@msd)), - // format::Pos::from(tokAt(scanner,@end))); - format::get_writer() << "fixed_array(" << internal << ")"; - } - format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); - } - ((ExprMakeStruct *)(yyvsp[-2].pExpression))->makeType = (yyvsp[-3].pTypeDecl); - ((ExprMakeStruct *)(yyvsp[-2].pExpression))->block = (yyvsp[-1].pExpression); - (yyvsp[-2].pExpression)->at = tokAt(scanner,(yylsp[-4])); - (yyval.pExpression) = (yyvsp[-2].pExpression); + { + // std::cout << "case1" << std::endl; + if (format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-4]))))) { + auto type = format::type_to_string((yyvsp[-3].pTypeDecl), tokAt(scanner,(yylsp[-3]))).value_or(""); + const bool is_initialized = false; + const auto before = format::substring_between(tokAt(scanner,(yylsp[-4])), tokAt(scanner, (yylsp[-3]))); + const auto internal = format::handle_msd(tokAt(scanner, (yylsp[-3])), + static_cast((yyvsp[-2].pExpression)), + tokAt(scanner, (yyvsp[-1].pExpression) != nullptr ? (yylsp[-1]) : (yylsp[0])), + type, is_initialized); + if (static_cast((yyvsp[-2].pExpression))->structs.size() == 1) { + // single struct + if (type.find('[') != size_t(-1)) { + format::get_writer() << "fixed_array(" << before << internal << ")"; + } else { + format::get_writer() << before << internal; + } + if ((yyvsp[-1].pExpression) != nullptr) { + format::get_writer() << " <| " << format::get_substring((yyvsp[-1].pExpression)->at); + } + } else { + // array of structs + // const auto internal = format::get_substring(format::Pos::from(tokAt(scanner,@msd)), + // format::Pos::from(tokAt(scanner,@end))); + format::get_writer() << "fixed_array(" << internal << ")"; + } + format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); + } + ((ExprMakeStruct *)(yyvsp[-2].pExpression))->makeType = (yyvsp[-3].pTypeDecl); + ((ExprMakeStruct *)(yyvsp[-2].pExpression))->block = (yyvsp[-1].pExpression); + (yyvsp[-2].pExpression)->at = tokAt(scanner,(yylsp[-4])); + (yyval.pExpression) = (yyvsp[-2].pExpression); } break; case 899: /* make_struct_decl: "[[" type_declaration_no_options optional_block optional_trailing_delim_sqr_sqr */ - { - // // std::cout << "case2" << std::endl; - if (format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-3]))))) { - auto type = format::type_to_string((yyvsp[-2].pTypeDecl), tokAt(scanner,(yylsp[-2]))); - das_hash_set always_init = { - // Is there a method to describe all this types? - "structisPointer()) { - format::get_writer() << "default<" << type.value() << ">"; - suffix.clear(); - } else if (any_of(always_init.begin(), always_init.end(), - [&type](auto t){ return type.value_or("").find(t) == 0; })) { - format::get_writer() << type.value_or("") << "("; - } else { - format::get_writer() << type.value_or("") << "("; // Possible uninitialized - } - format::get_writer() << before << after << suffix; - format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); - } - - auto msd = new ExprMakeStruct(); - msd->makeType = (yyvsp[-2].pTypeDecl); - msd->block = (yyvsp[-1].pExpression); - msd->at = tokAt(scanner,(yylsp[-3])); - (yyval.pExpression) = msd; + { + // // std::cout << "case2" << std::endl; + if (format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-3]))))) { + auto type = format::type_to_string((yyvsp[-2].pTypeDecl), tokAt(scanner,(yylsp[-2]))); + das_hash_set always_init = { + // Is there a method to describe all this types? + "structisPointer()) { + format::get_writer() << "default<" << type.value() << ">"; + suffix.clear(); + } else if (any_of(always_init.begin(), always_init.end(), + [&type](auto t){ return type.value_or("").find(t) == 0; })) { + format::get_writer() << type.value_or("") << "("; + } else { + format::get_writer() << type.value_or("") << "("; // Possible uninitialized + } + format::get_writer() << before << after << suffix; + format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); + } + + auto msd = new ExprMakeStruct(); + msd->makeType = (yyvsp[-2].pTypeDecl); + msd->block = (yyvsp[-1].pExpression); + msd->at = tokAt(scanner,(yylsp[-3])); + (yyval.pExpression) = msd; } break; case 900: /* make_struct_decl: "[[" type_declaration_no_options '(' ')' optional_block optional_trailing_delim_sqr_sqr */ - { - // std::cout << "case3" << std::endl; - if (format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-5]))))) { - const auto type_name = format::type_to_string((yyvsp[-4].pTypeDecl), tokAt(scanner,(yylsp[-4]))); - auto maybe_init = (format::can_default_init(type_name.value_or(""))) ? "" : ""; // Possible uninitialized - format::get_writer() << type_name.value_or("") << "(" - << format::substring_between(tokAt(scanner,(yylsp[-5])), tokAt(scanner, (yylsp[-4]))) - << format::substring_between(tokAt(scanner,(yylsp[-3])), tokAt(scanner, (yylsp[-2]))) - << format::substring_between(tokAt(scanner,(yylsp[-2])), tokAt(scanner, (yylsp[0]))) - << maybe_init << ")"; - format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); - } - auto msd = new ExprMakeStruct(); - msd->makeType = (yyvsp[-4].pTypeDecl); - msd->useInitializer = true; - msd->block = (yyvsp[-1].pExpression); - msd->at = tokAt(scanner,(yylsp[-5])); - (yyval.pExpression) = msd; + { + // std::cout << "case3" << std::endl; + if (format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-5]))))) { + const auto type_name = format::type_to_string((yyvsp[-4].pTypeDecl), tokAt(scanner,(yylsp[-4]))); + auto maybe_init = (format::can_default_init(type_name.value_or(""))) ? "" : ""; // Possible uninitialized + format::get_writer() << type_name.value_or("") << "(" + << format::substring_between(tokAt(scanner,(yylsp[-5])), tokAt(scanner, (yylsp[-4]))) + << format::substring_between(tokAt(scanner,(yylsp[-3])), tokAt(scanner, (yylsp[-2]))) + << format::substring_between(tokAt(scanner,(yylsp[-2])), tokAt(scanner, (yylsp[0]))) + << maybe_init << ")"; + format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); + } + auto msd = new ExprMakeStruct(); + msd->makeType = (yyvsp[-4].pTypeDecl); + msd->useInitializer = true; + msd->block = (yyvsp[-1].pExpression); + msd->at = tokAt(scanner,(yylsp[-5])); + (yyval.pExpression) = msd; } break; case 901: /* make_struct_decl: "[[" type_declaration_no_options '(' ')' make_struct_dim optional_block optional_trailing_delim_sqr_sqr */ - { - // std::cout << "case4" << std::endl; - if (format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-6]))))) { - auto type_name = format::type_to_string((yyvsp[-5].pTypeDecl), tokAt(scanner,(yylsp[-5]))).value_or(""); - const auto internal = format::handle_msd(tokAt(scanner, (yylsp[-3])), - static_cast((yyvsp[-2].pExpression)), - tokAt(scanner, (yylsp[0])), - type_name); - format::get_writer() << format::substring_between(tokAt(scanner, (yylsp[-6])), tokAt(scanner, (yylsp[-5]))) - << format::substring_between(tokAt(scanner, (yylsp[-4])), tokAt(scanner, (yylsp[-3]))) - << internal; - format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); - } - - ((ExprMakeStruct *)(yyvsp[-2].pExpression))->makeType = (yyvsp[-5].pTypeDecl); - ((ExprMakeStruct *)(yyvsp[-2].pExpression))->useInitializer = true; - ((ExprMakeStruct *)(yyvsp[-2].pExpression))->block = (yyvsp[-1].pExpression); - (yyvsp[-2].pExpression)->at = tokAt(scanner,(yylsp[-6])); - (yyval.pExpression) = (yyvsp[-2].pExpression); + { + // std::cout << "case4" << std::endl; + if (format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-6]))))) { + auto type_name = format::type_to_string((yyvsp[-5].pTypeDecl), tokAt(scanner,(yylsp[-5]))).value_or(""); + const auto internal = format::handle_msd(tokAt(scanner, (yylsp[-3])), + static_cast((yyvsp[-2].pExpression)), + tokAt(scanner, (yylsp[0])), + type_name); + format::get_writer() << format::substring_between(tokAt(scanner, (yylsp[-6])), tokAt(scanner, (yylsp[-5]))) + << format::substring_between(tokAt(scanner, (yylsp[-4])), tokAt(scanner, (yylsp[-3]))) + << internal; + format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); + } + + ((ExprMakeStruct *)(yyvsp[-2].pExpression))->makeType = (yyvsp[-5].pTypeDecl); + ((ExprMakeStruct *)(yyvsp[-2].pExpression))->useInitializer = true; + ((ExprMakeStruct *)(yyvsp[-2].pExpression))->block = (yyvsp[-1].pExpression); + (yyvsp[-2].pExpression)->at = tokAt(scanner,(yylsp[-6])); + (yyval.pExpression) = (yyvsp[-2].pExpression); } break; case 902: /* make_struct_decl: "[{" type_declaration_no_options make_struct_dim optional_block optional_trailing_delim_cur_sqr */ - { - // std::cout << "case6" << std::endl; - if (format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-4]))))) { - auto type_name = format::type_to_string((yyvsp[-3].pTypeDecl), tokAt(scanner,(yylsp[-3]))).value_or(""); - format::get_writer() << "[" << format::substring_between(tokAt(scanner, (yylsp[-4])), tokAt(scanner, (yylsp[-3]))) - << format::handle_msd(tokAt(scanner, (yylsp[-3])), - static_cast((yyvsp[-2].pExpression)), - tokAt(scanner, (yylsp[0])), - type_name) - << "]"; - format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); - } - - ((ExprMakeStruct *)(yyvsp[-2].pExpression))->makeType = (yyvsp[-3].pTypeDecl); - ((ExprMakeStruct *)(yyvsp[-2].pExpression))->block = (yyvsp[-1].pExpression); - (yyvsp[-2].pExpression)->at = tokAt(scanner,(yylsp[-4])); - auto tam = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-4])),"to_array_move"); - tam->arguments.push_back((yyvsp[-2].pExpression)); - (yyval.pExpression) = tam; + { + // std::cout << "case6" << std::endl; + if (format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-4]))))) { + auto type_name = format::type_to_string((yyvsp[-3].pTypeDecl), tokAt(scanner,(yylsp[-3]))).value_or(""); + format::get_writer() << "[" << format::substring_between(tokAt(scanner, (yylsp[-4])), tokAt(scanner, (yylsp[-3]))) + << format::handle_msd(tokAt(scanner, (yylsp[-3])), + static_cast((yyvsp[-2].pExpression)), + tokAt(scanner, (yylsp[0])), + type_name) + << "]"; + format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); + } + + ((ExprMakeStruct *)(yyvsp[-2].pExpression))->makeType = (yyvsp[-3].pTypeDecl); + ((ExprMakeStruct *)(yyvsp[-2].pExpression))->block = (yyvsp[-1].pExpression); + (yyvsp[-2].pExpression)->at = tokAt(scanner,(yylsp[-4])); + auto tam = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-4])),"to_array_move"); + tam->arguments.push_back((yyvsp[-2].pExpression)); + (yyval.pExpression) = tam; } break; case 903: /* make_struct_decl: "[{" type_declaration_no_options '(' ')' make_struct_dim optional_block optional_trailing_delim_cur_sqr */ - { - // std::cout << "case7" << std::endl; - if (format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-6]))))) { - auto type_name = format::type_to_string((yyvsp[-5].pTypeDecl), tokAt(scanner,(yylsp[-5]))).value_or(""); - format::get_writer() << "[" << format::substring_between(tokAt(scanner, (yylsp[-6])), tokAt(scanner, (yylsp[-5]))) - << format::handle_msd(tokAt(scanner, (yylsp[-3])), - static_cast((yyvsp[-2].pExpression)), - tokAt(scanner, (yylsp[0])), - type_name) - << "]"; - format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); - } - - ((ExprMakeStruct *)(yyvsp[-2].pExpression))->makeType = (yyvsp[-5].pTypeDecl); - ((ExprMakeStruct *)(yyvsp[-2].pExpression))->useInitializer = true; - ((ExprMakeStruct *)(yyvsp[-2].pExpression))->block = (yyvsp[-1].pExpression); - (yyvsp[-2].pExpression)->at = tokAt(scanner,(yylsp[-6])); - auto tam = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-6])),"to_array_move"); - tam->arguments.push_back((yyvsp[-2].pExpression)); - (yyval.pExpression) = tam; + { + // std::cout << "case7" << std::endl; + if (format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-6]))))) { + auto type_name = format::type_to_string((yyvsp[-5].pTypeDecl), tokAt(scanner,(yylsp[-5]))).value_or(""); + format::get_writer() << "[" << format::substring_between(tokAt(scanner, (yylsp[-6])), tokAt(scanner, (yylsp[-5]))) + << format::handle_msd(tokAt(scanner, (yylsp[-3])), + static_cast((yyvsp[-2].pExpression)), + tokAt(scanner, (yylsp[0])), + type_name) + << "]"; + format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); + } + + ((ExprMakeStruct *)(yyvsp[-2].pExpression))->makeType = (yyvsp[-5].pTypeDecl); + ((ExprMakeStruct *)(yyvsp[-2].pExpression))->useInitializer = true; + ((ExprMakeStruct *)(yyvsp[-2].pExpression))->block = (yyvsp[-1].pExpression); + (yyvsp[-2].pExpression)->at = tokAt(scanner,(yylsp[-6])); + auto tam = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-6])),"to_array_move"); + tam->arguments.push_back((yyvsp[-2].pExpression)); + (yyval.pExpression) = tam; } break; @@ -12106,13 +12108,13 @@ YYLTYPE yylloc = yyloc_default; break; case 906: /* make_struct_decl: "struct" '<' $@86 type_declaration_no_options '>' $@87 '(' use_initializer optional_make_struct_dim_decl ')' */ - { - (yyvsp[-1].pExpression)->at = tokAt(scanner,(yylsp[-9])); - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->makeType = (yyvsp[-6].pTypeDecl); - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->useInitializer = (yyvsp[-2].b); - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->forceStruct = true; - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->alwaysUseInitializer = true; - (yyval.pExpression) = (yyvsp[-1].pExpression); + { + (yyvsp[-1].pExpression)->at = tokAt(scanner,(yylsp[-9])); + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->makeType = (yyvsp[-6].pTypeDecl); + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->useInitializer = (yyvsp[-2].b); + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->forceStruct = true; + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->alwaysUseInitializer = true; + (yyval.pExpression) = (yyvsp[-1].pExpression); } break; @@ -12125,12 +12127,12 @@ YYLTYPE yylloc = yyloc_default; break; case 909: /* make_struct_decl: "class" '<' $@88 type_declaration_no_options '>' $@89 '(' use_initializer optional_make_struct_dim_decl ')' */ - { - (yyvsp[-1].pExpression)->at = tokAt(scanner,(yylsp[-9])); - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->makeType = (yyvsp[-6].pTypeDecl); - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->useInitializer = (yyvsp[-2].b); - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->forceClass = true; - (yyval.pExpression) = (yyvsp[-1].pExpression); + { + (yyvsp[-1].pExpression)->at = tokAt(scanner,(yylsp[-9])); + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->makeType = (yyvsp[-6].pTypeDecl); + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->useInitializer = (yyvsp[-2].b); + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->forceClass = true; + (yyval.pExpression) = (yyvsp[-1].pExpression); } break; @@ -12143,16 +12145,16 @@ YYLTYPE yylloc = yyloc_default; break; case 912: /* make_struct_decl: "variant" '<' $@90 variant_type_list '>' $@91 '(' use_initializer make_variant_dim ')' */ - { - auto mkt = new TypeDecl(Type::tVariant); - mkt->at = tokAt(scanner,(yylsp[-9])); - varDeclToTypeDecl(scanner, mkt, (yyvsp[-6].pVarDeclList), true); - deleteVariableDeclarationList((yyvsp[-6].pVarDeclList)); - (yyvsp[-1].pExpression)->at = tokAt(scanner,(yylsp[-9])); - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->makeType = mkt; - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->useInitializer = (yyvsp[-2].b); - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->forceVariant = true; - (yyval.pExpression) = (yyvsp[-1].pExpression); + { + auto mkt = new TypeDecl(Type::tVariant); + mkt->at = tokAt(scanner,(yylsp[-9])); + varDeclToTypeDecl(scanner, mkt, (yyvsp[-6].pVarDeclList), true); + deleteVariableDeclarationList((yyvsp[-6].pVarDeclList)); + (yyvsp[-1].pExpression)->at = tokAt(scanner,(yylsp[-9])); + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->makeType = mkt; + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->useInitializer = (yyvsp[-2].b); + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->forceVariant = true; + (yyval.pExpression) = (yyvsp[-1].pExpression); } break; @@ -12165,69 +12167,69 @@ YYLTYPE yylloc = yyloc_default; break; case 915: /* make_struct_decl: "default" '<' $@92 type_declaration_no_options '>' $@93 use_initializer */ - { - auto msd = new ExprMakeStruct(); - msd->at = tokAt(scanner,(yylsp[-6])); - msd->makeType = (yyvsp[-3].pTypeDecl); - msd->useInitializer = (yyvsp[0].b); - msd->alwaysUseInitializer = true; - (yyval.pExpression) = msd; + { + auto msd = new ExprMakeStruct(); + msd->at = tokAt(scanner,(yylsp[-6])); + msd->makeType = (yyvsp[-3].pTypeDecl); + msd->useInitializer = (yyvsp[0].b); + msd->alwaysUseInitializer = true; + (yyval.pExpression) = msd; } break; case 916: /* make_tuple: expr */ - { - (yyvsp[0].pExpression)->at = tokAt(scanner,(yylsp[0])); - (yyval.pExpression) = (yyvsp[0].pExpression); + { + (yyvsp[0].pExpression)->at = tokAt(scanner,(yylsp[0])); + (yyval.pExpression) = (yyvsp[0].pExpression); } break; case 917: /* make_tuple: expr "=>" expr */ - { - ExprMakeTuple * mt = new ExprMakeTuple(tokRangeAt(scanner,(yylsp[-2]), (yylsp[0]))); - mt->values.push_back((yyvsp[-2].pExpression)); - mt->values.push_back((yyvsp[0].pExpression)); - (yyval.pExpression) = mt; + { + ExprMakeTuple * mt = new ExprMakeTuple(tokRangeAt(scanner,(yylsp[-2]), (yylsp[0]))); + mt->values.push_back((yyvsp[-2].pExpression)); + mt->values.push_back((yyvsp[0].pExpression)); + (yyval.pExpression) = mt; } break; case 918: /* make_tuple: make_tuple ',' expr */ - { - (yyvsp[0].pExpression)->at = tokAt(scanner,(yylsp[0])); - ExprMakeTuple * mt; - if ( (yyvsp[-2].pExpression)->rtti_isMakeTuple() ) { - mt = static_cast((yyvsp[-2].pExpression)); - } else { - mt = new ExprMakeTuple(tokAt(scanner,(yylsp[-2]))); - mt->values.push_back((yyvsp[-2].pExpression)); - } - mt->values.push_back((yyvsp[0].pExpression)); - mt->at = format::concat(mt->at, tokAt(scanner, (yylsp[0]))); - (yyval.pExpression) = mt; + { + (yyvsp[0].pExpression)->at = tokAt(scanner,(yylsp[0])); + ExprMakeTuple * mt; + if ( (yyvsp[-2].pExpression)->rtti_isMakeTuple() ) { + mt = static_cast((yyvsp[-2].pExpression)); + } else { + mt = new ExprMakeTuple(tokAt(scanner,(yylsp[-2]))); + mt->values.push_back((yyvsp[-2].pExpression)); + } + mt->values.push_back((yyvsp[0].pExpression)); + mt->at = format::concat(mt->at, tokAt(scanner, (yylsp[0]))); + (yyval.pExpression) = mt; } break; case 919: /* make_map_tuple: expr "=>" expr */ - { - ExprMakeTuple * mt = new ExprMakeTuple(tokRangeAt(scanner,(yylsp[-2]),(yylsp[0]))); - mt->values.push_back((yyvsp[-2].pExpression)); - mt->values.push_back((yyvsp[0].pExpression)); - (yyval.pExpression) = mt; + { + ExprMakeTuple * mt = new ExprMakeTuple(tokRangeAt(scanner,(yylsp[-2]),(yylsp[0]))); + mt->values.push_back((yyvsp[-2].pExpression)); + mt->values.push_back((yyvsp[0].pExpression)); + (yyval.pExpression) = mt; } break; case 920: /* make_map_tuple: expr */ - { - (yyval.pExpression) = (yyvsp[0].pExpression); + { + (yyval.pExpression) = (yyvsp[0].pExpression); } break; case 921: /* make_tuple_call: "tuple" '(' expr_list optional_comma ')' */ - { - auto mkt = new ExprMakeTuple(tokAt(scanner,(yylsp[-4]))); - mkt->values = sequenceToList((yyvsp[-2].pExpression)); - mkt->makeType = new TypeDecl(Type::autoinfer); - (yyval.pExpression) = mkt; + { + auto mkt = new ExprMakeTuple(tokAt(scanner,(yylsp[-4]))); + mkt->values = sequenceToList((yyvsp[-2].pExpression)); + mkt->makeType = new TypeDecl(Type::autoinfer); + (yyval.pExpression) = mkt; } break; @@ -12240,112 +12242,112 @@ YYLTYPE yylloc = yyloc_default; break; case 924: /* make_tuple_call: "tuple" '<' $@94 tuple_type_list '>' $@95 '(' use_initializer optional_make_struct_dim_decl ')' */ - { - auto mkt = new TypeDecl(Type::tTuple); - mkt->at = tokAt(scanner,(yylsp[-9])); - varDeclToTypeDecl(scanner, mkt, (yyvsp[-6].pVarDeclList), true); - deleteVariableDeclarationList((yyvsp[-6].pVarDeclList)); - (yyvsp[-1].pExpression)->at = tokAt(scanner,(yylsp[-9])); - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->makeType = mkt; - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->useInitializer = (yyvsp[-2].b); - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->forceTuple = true; - (yyval.pExpression) = (yyvsp[-1].pExpression); + { + auto mkt = new TypeDecl(Type::tTuple); + mkt->at = tokAt(scanner,(yylsp[-9])); + varDeclToTypeDecl(scanner, mkt, (yyvsp[-6].pVarDeclList), true); + deleteVariableDeclarationList((yyvsp[-6].pVarDeclList)); + (yyvsp[-1].pExpression)->at = tokAt(scanner,(yylsp[-9])); + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->makeType = mkt; + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->useInitializer = (yyvsp[-2].b); + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->forceTuple = true; + (yyval.pExpression) = (yyvsp[-1].pExpression); } break; case 925: /* make_dim: make_tuple */ - { - auto mka = new ExprMakeArray(); - mka->values.push_back((yyvsp[0].pExpression)); - (yyval.pExpression) = mka; + { + auto mka = new ExprMakeArray(); + mka->values.push_back((yyvsp[0].pExpression)); + (yyval.pExpression) = mka; } break; case 926: /* make_dim: make_dim semicolon make_tuple */ - { - ((ExprMakeArray *) (yyvsp[-2].pExpression))->values.push_back((yyvsp[0].pExpression)); - (yyval.pExpression) = (yyvsp[-2].pExpression); + { + ((ExprMakeArray *) (yyvsp[-2].pExpression))->values.push_back((yyvsp[0].pExpression)); + (yyval.pExpression) = (yyvsp[-2].pExpression); } break; case 927: /* make_dim_decl: '[' optional_expr_list ']' */ - { - if ( (yyvsp[-1].pExpression) ) { - auto mka = new ExprMakeArray(tokAt(scanner,(yylsp[-2]))); - mka->values = sequenceToList((yyvsp[-1].pExpression)); - mka->makeType = new TypeDecl(Type::autoinfer); - mka->gen2 = true; - auto tam = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-2])),"to_array_move"); - tam->arguments.push_back(mka); - (yyval.pExpression) = tam; - } else { - auto mks = new ExprMakeStruct(); - mks->at = tokAt(scanner,(yylsp[-2])); - mks->makeType = new TypeDecl(Type::tArray); - mks->makeType->firstType = new TypeDecl(Type::autoinfer); - mks->useInitializer = true; - mks->alwaysUseInitializer = true; - (yyval.pExpression) = mks; - } - + { + if ( (yyvsp[-1].pExpression) ) { + auto mka = new ExprMakeArray(tokAt(scanner,(yylsp[-2]))); + mka->values = sequenceToList((yyvsp[-1].pExpression)); + mka->makeType = new TypeDecl(Type::autoinfer); + mka->gen2 = true; + auto tam = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-2])),"to_array_move"); + tam->arguments.push_back(mka); + (yyval.pExpression) = tam; + } else { + auto mks = new ExprMakeStruct(); + mks->at = tokAt(scanner,(yylsp[-2])); + mks->makeType = new TypeDecl(Type::tArray); + mks->makeType->firstType = new TypeDecl(Type::autoinfer); + mks->useInitializer = true; + mks->alwaysUseInitializer = true; + (yyval.pExpression) = mks; + } + } break; case 928: /* make_dim_decl: "[[" type_declaration_no_options make_dim optional_trailing_semicolon_sqr_sqr */ - { - // std::cout << "case13" << std::endl; - if (format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-3]))))) { - auto type_name = format::type_to_string((yyvsp[-2].pTypeDecl), tokAt(scanner,(yylsp[-2]))); - auto internal = format::handle_mka(tokAt(scanner, (yylsp[-2])), - static_cast((yyvsp[-1].pExpression)), - tokAt(scanner, (yylsp[0]))); - const auto before = format::substring_between(tokAt(scanner, (yylsp[-3])), tokAt(scanner, (yylsp[-2]))); - if (static_cast((yyvsp[-1].pExpression))->values.size() == 1) { - // single element - if (type_name.value_or("").find('[') != size_t(-1)) { - format::get_writer() << "fixed_array(" << before << internal << ")"; - } else { - format::get_writer() << before << internal; - } - } else { - format::get_writer() << "fixed_array"; - if (!(yyvsp[-2].pTypeDecl)->isAuto()) { - format::get_writer() << "<" << type_name.value().substr(0, type_name.value().find('[')) << ">"; - } - format::get_writer() << "(" << before << internal << ")"; - } - format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); - } - ((ExprMakeArray *)(yyvsp[-1].pExpression))->makeType = (yyvsp[-2].pTypeDecl); - (yyvsp[-1].pExpression)->at = tokAt(scanner,(yylsp[-3])); - (yyval.pExpression) = (yyvsp[-1].pExpression); + { + // std::cout << "case13" << std::endl; + if (format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-3]))))) { + auto type_name = format::type_to_string((yyvsp[-2].pTypeDecl), tokAt(scanner,(yylsp[-2]))); + auto internal = format::handle_mka(tokAt(scanner, (yylsp[-2])), + static_cast((yyvsp[-1].pExpression)), + tokAt(scanner, (yylsp[0]))); + const auto before = format::substring_between(tokAt(scanner, (yylsp[-3])), tokAt(scanner, (yylsp[-2]))); + if (static_cast((yyvsp[-1].pExpression))->values.size() == 1) { + // single element + if (type_name.value_or("").find('[') != size_t(-1)) { + format::get_writer() << "fixed_array(" << before << internal << ")"; + } else { + format::get_writer() << before << internal; + } + } else { + format::get_writer() << "fixed_array"; + if (!(yyvsp[-2].pTypeDecl)->isAuto()) { + format::get_writer() << "<" << type_name.value().substr(0, type_name.value().find('[')) << ">"; + } + format::get_writer() << "(" << before << internal << ")"; + } + format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); + } + ((ExprMakeArray *)(yyvsp[-1].pExpression))->makeType = (yyvsp[-2].pTypeDecl); + (yyvsp[-1].pExpression)->at = tokAt(scanner,(yylsp[-3])); + (yyval.pExpression) = (yyvsp[-1].pExpression); } break; case 929: /* make_dim_decl: "[{" type_declaration_no_options make_dim optional_trailing_semicolon_cur_sqr */ - { - // std::cout << "case8" << std::endl; - if (format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-3]))))) { - string prefix = "["; - string suffix = "]"; - if (!(yyvsp[-2].pTypeDecl)->isAuto()) { - prefix = "array<" + format::get_substring(tokAt(scanner,(yylsp[-2]))) + ">("; - suffix = ")"; - } - format::get_writer() << prefix - << format::substring_between(tokAt(scanner, (yylsp[-3])), tokAt(scanner, (yylsp[-2]))) - << format::handle_mka(tokAt(scanner, (yylsp[-2])), - static_cast((yyvsp[-1].pExpression)), - tokAt(scanner, (yylsp[0]))) - << suffix; - format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); - } - - ((ExprMakeArray *)(yyvsp[-1].pExpression))->makeType = (yyvsp[-2].pTypeDecl); - (yyvsp[-1].pExpression)->at = tokAt(scanner,(yylsp[-3])); - auto tam = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-3])),"to_array_move"); - tam->arguments.push_back((yyvsp[-1].pExpression)); - (yyval.pExpression) = tam; + { + // std::cout << "case8" << std::endl; + if (format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-3]))))) { + string prefix = "["; + string suffix = "]"; + if (!(yyvsp[-2].pTypeDecl)->isAuto()) { + prefix = "array<" + format::get_substring(tokAt(scanner,(yylsp[-2]))) + ">("; + suffix = ")"; + } + format::get_writer() << prefix + << format::substring_between(tokAt(scanner, (yylsp[-3])), tokAt(scanner, (yylsp[-2]))) + << format::handle_mka(tokAt(scanner, (yylsp[-2])), + static_cast((yyvsp[-1].pExpression)), + tokAt(scanner, (yylsp[0]))) + << suffix; + format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); + } + + ((ExprMakeArray *)(yyvsp[-1].pExpression))->makeType = (yyvsp[-2].pTypeDecl); + (yyvsp[-1].pExpression)->at = tokAt(scanner,(yylsp[-3])); + auto tam = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-3])),"to_array_move"); + tam->arguments.push_back((yyvsp[-1].pExpression)); + (yyval.pExpression) = tam; } break; @@ -12358,15 +12360,15 @@ YYLTYPE yylloc = yyloc_default; break; case 932: /* make_dim_decl: "array" "struct" '<' $@96 type_declaration_no_options '>' $@97 '(' use_initializer optional_make_struct_dim_decl ')' */ - { - (yyvsp[-1].pExpression)->at = tokAt(scanner,(yylsp[-10])); - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->makeType = (yyvsp[-6].pTypeDecl); - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->useInitializer = (yyvsp[-2].b); - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->forceStruct = true; - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->alwaysUseInitializer = true; - auto tam = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-10])),"to_array_move"); - tam->arguments.push_back((yyvsp[-1].pExpression)); - (yyval.pExpression) = tam; + { + (yyvsp[-1].pExpression)->at = tokAt(scanner,(yylsp[-10])); + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->makeType = (yyvsp[-6].pTypeDecl); + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->useInitializer = (yyvsp[-2].b); + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->forceStruct = true; + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->alwaysUseInitializer = true; + auto tam = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-10])),"to_array_move"); + tam->arguments.push_back((yyvsp[-1].pExpression)); + (yyval.pExpression) = tam; } break; @@ -12379,19 +12381,19 @@ YYLTYPE yylloc = yyloc_default; break; case 935: /* make_dim_decl: "array" "tuple" '<' $@98 tuple_type_list '>' $@99 '(' use_initializer optional_make_struct_dim_decl ')' */ - { - auto mkt = new TypeDecl(Type::tTuple); - mkt->at = tokAt(scanner,(yylsp[-10])); - varDeclToTypeDecl(scanner, mkt, (yyvsp[-6].pVarDeclList), true); - deleteVariableDeclarationList((yyvsp[-6].pVarDeclList)); - (yyvsp[-1].pExpression)->at = tokAt(scanner,(yylsp[-10])); - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->makeType = mkt; - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->useInitializer = (yyvsp[-2].b); - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->forceTuple = true; - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->alwaysUseInitializer = true; - auto tam = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-10])),"to_array_move"); - tam->arguments.push_back((yyvsp[-1].pExpression)); - (yyval.pExpression) = tam; + { + auto mkt = new TypeDecl(Type::tTuple); + mkt->at = tokAt(scanner,(yylsp[-10])); + varDeclToTypeDecl(scanner, mkt, (yyvsp[-6].pVarDeclList), true); + deleteVariableDeclarationList((yyvsp[-6].pVarDeclList)); + (yyvsp[-1].pExpression)->at = tokAt(scanner,(yylsp[-10])); + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->makeType = mkt; + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->useInitializer = (yyvsp[-2].b); + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->forceTuple = true; + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->alwaysUseInitializer = true; + auto tam = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-10])),"to_array_move"); + tam->arguments.push_back((yyvsp[-1].pExpression)); + (yyval.pExpression) = tam; } break; @@ -12404,31 +12406,31 @@ YYLTYPE yylloc = yyloc_default; break; case 938: /* make_dim_decl: "array" "variant" '<' $@100 variant_type_list '>' $@101 '(' make_variant_dim ')' */ - { - auto mkt = new TypeDecl(Type::tVariant); - mkt->at = tokAt(scanner,(yylsp[-9])); - varDeclToTypeDecl(scanner, mkt, (yyvsp[-5].pVarDeclList), true); - deleteVariableDeclarationList((yyvsp[-5].pVarDeclList)); - (yyvsp[-1].pExpression)->at = tokAt(scanner,(yylsp[-9])); - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->makeType = mkt; - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->useInitializer = true; - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->forceVariant = true; - ((ExprMakeStruct *)(yyvsp[-1].pExpression))->alwaysUseInitializer = true; - auto tam = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-9])),"to_array_move"); - tam->arguments.push_back((yyvsp[-1].pExpression)); - (yyval.pExpression) = tam; + { + auto mkt = new TypeDecl(Type::tVariant); + mkt->at = tokAt(scanner,(yylsp[-9])); + varDeclToTypeDecl(scanner, mkt, (yyvsp[-5].pVarDeclList), true); + deleteVariableDeclarationList((yyvsp[-5].pVarDeclList)); + (yyvsp[-1].pExpression)->at = tokAt(scanner,(yylsp[-9])); + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->makeType = mkt; + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->useInitializer = true; + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->forceVariant = true; + ((ExprMakeStruct *)(yyvsp[-1].pExpression))->alwaysUseInitializer = true; + auto tam = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-9])),"to_array_move"); + tam->arguments.push_back((yyvsp[-1].pExpression)); + (yyval.pExpression) = tam; } break; case 939: /* make_dim_decl: "array" '(' expr_list optional_comma ')' */ - { - auto mka = new ExprMakeArray(tokAt(scanner,(yylsp[-4]))); - mka->values = sequenceToList((yyvsp[-2].pExpression)); - mka->makeType = new TypeDecl(Type::autoinfer); - mka->gen2 = true; - auto tam = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-4])),"to_array_move"); - tam->arguments.push_back(mka); - (yyval.pExpression) = tam; + { + auto mka = new ExprMakeArray(tokAt(scanner,(yylsp[-4]))); + mka->values = sequenceToList((yyvsp[-2].pExpression)); + mka->makeType = new TypeDecl(Type::autoinfer); + mka->gen2 = true; + auto tam = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-4])),"to_array_move"); + tam->arguments.push_back(mka); + (yyval.pExpression) = tam; } break; @@ -12441,35 +12443,35 @@ YYLTYPE yylloc = yyloc_default; break; case 942: /* make_dim_decl: "array" '<' $@102 type_declaration_no_options '>' $@103 '(' optional_expr_list ')' */ - { - if ( (yyvsp[-1].pExpression) ) { - auto mka = new ExprMakeArray(tokAt(scanner,(yylsp[-8]))); - mka->values = sequenceToList((yyvsp[-1].pExpression)); - mka->makeType = (yyvsp[-5].pTypeDecl); - mka->gen2 = true; - auto tam = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-8])),"to_array_move"); - tam->arguments.push_back(mka); - (yyval.pExpression) = tam; - } else { - auto msd = new ExprMakeStruct(); - msd->at = tokAt(scanner,(yylsp[-8])); - msd->makeType = new TypeDecl(Type::tArray); - msd->makeType->firstType = (yyvsp[-5].pTypeDecl); - msd->at = tokAt(scanner,(yylsp[-5])); - msd->useInitializer = true; - msd->alwaysUseInitializer = true; - (yyval.pExpression) = msd; - } + { + if ( (yyvsp[-1].pExpression) ) { + auto mka = new ExprMakeArray(tokAt(scanner,(yylsp[-8]))); + mka->values = sequenceToList((yyvsp[-1].pExpression)); + mka->makeType = (yyvsp[-5].pTypeDecl); + mka->gen2 = true; + auto tam = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-8])),"to_array_move"); + tam->arguments.push_back(mka); + (yyval.pExpression) = tam; + } else { + auto msd = new ExprMakeStruct(); + msd->at = tokAt(scanner,(yylsp[-8])); + msd->makeType = new TypeDecl(Type::tArray); + msd->makeType->firstType = (yyvsp[-5].pTypeDecl); + msd->at = tokAt(scanner,(yylsp[-5])); + msd->useInitializer = true; + msd->alwaysUseInitializer = true; + (yyval.pExpression) = msd; + } } break; case 943: /* make_dim_decl: "fixed_array" '(' expr_list optional_comma ')' */ - { - auto mka = new ExprMakeArray(tokAt(scanner,(yylsp[-4]))); - mka->values = sequenceToList((yyvsp[-2].pExpression)); - mka->makeType = new TypeDecl(Type::autoinfer); - mka->gen2 = true; - (yyval.pExpression) = mka; + { + auto mka = new ExprMakeArray(tokAt(scanner,(yylsp[-4]))); + mka->values = sequenceToList((yyvsp[-2].pExpression)); + mka->makeType = new TypeDecl(Type::autoinfer); + mka->gen2 = true; + (yyval.pExpression) = mka; } break; @@ -12482,143 +12484,143 @@ YYLTYPE yylloc = yyloc_default; break; case 946: /* make_dim_decl: "fixed_array" '<' $@104 type_declaration_no_options '>' $@105 '(' expr_list optional_comma ')' */ - { - auto mka = new ExprMakeArray(tokAt(scanner,(yylsp[-9]))); - mka->values = sequenceToList((yyvsp[-2].pExpression)); - mka->makeType = (yyvsp[-6].pTypeDecl); - mka->gen2 = true; - (yyval.pExpression) = mka; + { + auto mka = new ExprMakeArray(tokAt(scanner,(yylsp[-9]))); + mka->values = sequenceToList((yyvsp[-2].pExpression)); + mka->makeType = (yyvsp[-6].pTypeDecl); + mka->gen2 = true; + (yyval.pExpression) = mka; } break; case 947: /* make_table: make_map_tuple */ - { - auto mka = new ExprMakeArray(); - mka->values.push_back((yyvsp[0].pExpression)); - (yyval.pExpression) = mka; + { + auto mka = new ExprMakeArray(); + mka->values.push_back((yyvsp[0].pExpression)); + (yyval.pExpression) = mka; } break; case 948: /* make_table: make_table semicolon make_map_tuple */ - { - ((ExprMakeArray *) (yyvsp[-2].pExpression))->values.push_back((yyvsp[0].pExpression)); - (yyval.pExpression) = (yyvsp[-2].pExpression); + { + ((ExprMakeArray *) (yyvsp[-2].pExpression))->values.push_back((yyvsp[0].pExpression)); + (yyval.pExpression) = (yyvsp[-2].pExpression); } break; case 949: /* expr_map_tuple_list: make_map_tuple */ - { - (yyval.pExpression) = (yyvsp[0].pExpression); + { + (yyval.pExpression) = (yyvsp[0].pExpression); } break; case 950: /* expr_map_tuple_list: expr_map_tuple_list ',' make_map_tuple */ - { - (yyval.pExpression) = new ExprSequence(tokAt(scanner,(yylsp[-2])),(yyvsp[-2].pExpression),(yyvsp[0].pExpression)); + { + (yyval.pExpression) = new ExprSequence(tokAt(scanner,(yylsp[-2])),(yyvsp[-2].pExpression),(yyvsp[0].pExpression)); } break; case 951: /* make_table_decl: open_block optional_expr_map_tuple_list close_block */ - { - if ( (yyvsp[-1].pExpression) ) { - auto mka = new ExprMakeArray(tokAt(scanner,(yylsp[-2]))); - mka->values = sequenceToList((yyvsp[-1].pExpression)); - mka->makeType = new TypeDecl(Type::autoinfer); - auto ttm = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-2])),"to_table_move"); - ttm->arguments.push_back(mka); - (yyval.pExpression) = ttm; - } else { - auto mks = new ExprMakeStruct(); - mks->at = tokAt(scanner,(yylsp[-2])); - mks->makeType = new TypeDecl(Type::tTable); - mks->makeType->firstType = new TypeDecl(Type::autoinfer); - mks->makeType->secondType = new TypeDecl(Type::autoinfer); - mks->useInitializer = true; - mks->alwaysUseInitializer = true; - (yyval.pExpression) = mks; - } - + { + if ( (yyvsp[-1].pExpression) ) { + auto mka = new ExprMakeArray(tokAt(scanner,(yylsp[-2]))); + mka->values = sequenceToList((yyvsp[-1].pExpression)); + mka->makeType = new TypeDecl(Type::autoinfer); + auto ttm = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-2])),"to_table_move"); + ttm->arguments.push_back(mka); + (yyval.pExpression) = ttm; + } else { + auto mks = new ExprMakeStruct(); + mks->at = tokAt(scanner,(yylsp[-2])); + mks->makeType = new TypeDecl(Type::tTable); + mks->makeType->firstType = new TypeDecl(Type::autoinfer); + mks->makeType->secondType = new TypeDecl(Type::autoinfer); + mks->useInitializer = true; + mks->alwaysUseInitializer = true; + (yyval.pExpression) = mks; + } + } break; case 952: /* make_table_decl: "{{" make_table optional_trailing_semicolon_cur_cur */ - { - // std::cout << "case10" << std::endl; - if (format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-2]))))) { - format::get_writer() << "{" - << format::substring_between(tokAt(scanner, (yylsp[-2])), tokAt(scanner, (yylsp[-1]))) - << format::convert_to_string(((ExprMakeArray *)(yyvsp[-1].pExpression))->values, ",", ";") - << format::substring_between(tokAt(scanner, (yylsp[-1])), tokAt(scanner, (yylsp[0]))) - << "}"; - format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); - } - - auto mkt = new TypeDecl(Type::autoinfer); - mkt->dim.push_back(TypeDecl::dimAuto); - ((ExprMakeArray *)(yyvsp[-1].pExpression))->makeType = mkt; - (yyvsp[-1].pExpression)->at = tokAt(scanner,(yylsp[-2])); - auto ttm = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-2])),"to_table_move"); - ttm->arguments.push_back((yyvsp[-1].pExpression)); - (yyval.pExpression) = ttm; + { + // std::cout << "case10" << std::endl; + if (format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-2]))))) { + format::get_writer() << "{" + << format::substring_between(tokAt(scanner, (yylsp[-2])), tokAt(scanner, (yylsp[-1]))) + << format::convert_to_string(((ExprMakeArray *)(yyvsp[-1].pExpression))->values, ",", ";") + << format::substring_between(tokAt(scanner, (yylsp[-1])), tokAt(scanner, (yylsp[0]))) + << "}"; + format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); + } + + auto mkt = new TypeDecl(Type::autoinfer); + mkt->dim.push_back(TypeDecl::dimAuto); + ((ExprMakeArray *)(yyvsp[-1].pExpression))->makeType = mkt; + (yyvsp[-1].pExpression)->at = tokAt(scanner,(yylsp[-2])); + auto ttm = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-2])),"to_table_move"); + ttm->arguments.push_back((yyvsp[-1].pExpression)); + (yyval.pExpression) = ttm; } break; case 953: /* make_table_decl: "table" '(' optional_expr_map_tuple_list ')' */ - { - auto mka = new ExprMakeArray(tokAt(scanner,(yylsp[-3]))); - mka->values = sequenceToList((yyvsp[-1].pExpression)); - mka->makeType = new TypeDecl(Type::autoinfer); - auto ttm = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-3])),"to_table_move"); - ttm->arguments.push_back(mka); - (yyval.pExpression) = ttm; + { + auto mka = new ExprMakeArray(tokAt(scanner,(yylsp[-3]))); + mka->values = sequenceToList((yyvsp[-1].pExpression)); + mka->makeType = new TypeDecl(Type::autoinfer); + auto ttm = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-3])),"to_table_move"); + ttm->arguments.push_back(mka); + (yyval.pExpression) = ttm; } break; case 954: /* make_table_decl: "table" '<' type_declaration_no_options '>' '(' optional_expr_map_tuple_list ')' */ - { - if ( (yyvsp[-1].pExpression) ) { - auto mka = new ExprMakeArray(tokAt(scanner,(yylsp[-6]))); - mka->values = sequenceToList((yyvsp[-1].pExpression)); - mka->makeType = (yyvsp[-4].pTypeDecl); - auto ttm = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-6])),"to_table_move"); - ttm->arguments.push_back(mka); - (yyval.pExpression) = ttm; - } else { - auto msd = new ExprMakeStruct(); - msd->at = tokAt(scanner,(yylsp[-6])); - msd->makeType = new TypeDecl(Type::tTable); - msd->makeType->firstType = (yyvsp[-4].pTypeDecl); - msd->makeType->secondType = new TypeDecl(Type::tVoid); - msd->at = tokAt(scanner,(yylsp[-6])); - msd->useInitializer = true; - msd->alwaysUseInitializer = true; - (yyval.pExpression) = msd; - } + { + if ( (yyvsp[-1].pExpression) ) { + auto mka = new ExprMakeArray(tokAt(scanner,(yylsp[-6]))); + mka->values = sequenceToList((yyvsp[-1].pExpression)); + mka->makeType = (yyvsp[-4].pTypeDecl); + auto ttm = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-6])),"to_table_move"); + ttm->arguments.push_back(mka); + (yyval.pExpression) = ttm; + } else { + auto msd = new ExprMakeStruct(); + msd->at = tokAt(scanner,(yylsp[-6])); + msd->makeType = new TypeDecl(Type::tTable); + msd->makeType->firstType = (yyvsp[-4].pTypeDecl); + msd->makeType->secondType = new TypeDecl(Type::tVoid); + msd->at = tokAt(scanner,(yylsp[-6])); + msd->useInitializer = true; + msd->alwaysUseInitializer = true; + (yyval.pExpression) = msd; + } } break; case 955: /* make_table_decl: "table" '<' type_declaration_no_options c_or_s type_declaration_no_options '>' '(' optional_expr_map_tuple_list ')' */ - { - if ( (yyvsp[-1].pExpression) ) { - auto mka = new ExprMakeArray(tokAt(scanner,(yylsp[-8]))); - mka->values = sequenceToList((yyvsp[-1].pExpression)); - mka->makeType = new TypeDecl(Type::tTuple); - mka->makeType->argTypes.push_back((yyvsp[-6].pTypeDecl)); - mka->makeType->argTypes.push_back((yyvsp[-4].pTypeDecl)); - auto ttm = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-8])),"to_table_move"); - ttm->arguments.push_back(mka); - (yyval.pExpression) = ttm; - } else { - auto msd = new ExprMakeStruct(); - msd->at = tokAt(scanner,(yylsp[-8])); - msd->makeType = new TypeDecl(Type::tTable); - msd->makeType->firstType = (yyvsp[-6].pTypeDecl); - msd->makeType->secondType = (yyvsp[-4].pTypeDecl); - msd->at = tokAt(scanner,(yylsp[-8])); - msd->useInitializer = true; - msd->alwaysUseInitializer = true; - (yyval.pExpression) = msd; - } + { + if ( (yyvsp[-1].pExpression) ) { + auto mka = new ExprMakeArray(tokAt(scanner,(yylsp[-8]))); + mka->values = sequenceToList((yyvsp[-1].pExpression)); + mka->makeType = new TypeDecl(Type::tTuple); + mka->makeType->argTypes.push_back((yyvsp[-6].pTypeDecl)); + mka->makeType->argTypes.push_back((yyvsp[-4].pTypeDecl)); + auto ttm = yyextra->g_Program->makeCall(tokAt(scanner,(yylsp[-8])),"to_table_move"); + ttm->arguments.push_back(mka); + (yyval.pExpression) = ttm; + } else { + auto msd = new ExprMakeStruct(); + msd->at = tokAt(scanner,(yylsp[-8])); + msd->makeType = new TypeDecl(Type::tTable); + msd->makeType->firstType = (yyvsp[-6].pTypeDecl); + msd->makeType->secondType = (yyvsp[-4].pTypeDecl); + msd->at = tokAt(scanner,(yylsp[-8])); + msd->useInitializer = true; + msd->alwaysUseInitializer = true; + (yyval.pExpression) = msd; + } } break; @@ -12639,97 +12641,97 @@ YYLTYPE yylloc = yyloc_default; break; case 960: /* array_comprehension: '[' "for" variable_name_with_pos_list "in" expr_list "end of expression" expr2 array_comprehension_where ']' */ - { - if (format::is_replace_braces() && format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-6]))))) { - format::get_writer() << "(" << format::get_substring(format::Pos::from(tokAt(scanner,(yylsp[-6]))), - format::Pos::from_last(tokAt(scanner,(yylsp[-4])))) << ")"; - format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[-4])))); - } - - (yyval.pExpression) = ast_arrayComprehension(scanner,tokAt(scanner,(yylsp[-7])),(yyvsp[-6].pNameWithPosList),(yyvsp[-4].pExpression),(yyvsp[-2].pExpression),(yyvsp[-1].pExpression),tokRangeAt(scanner,(yylsp[-2]),(yylsp[0])),false,false); + { + if (format::is_replace_braces() && format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-6]))))) { + format::get_writer() << "(" << format::get_substring(format::Pos::from(tokAt(scanner,(yylsp[-6]))), + format::Pos::from_last(tokAt(scanner,(yylsp[-4])))) << ")"; + format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[-4])))); + } + + (yyval.pExpression) = ast_arrayComprehension(scanner,tokAt(scanner,(yylsp[-7])),(yyvsp[-6].pNameWithPosList),(yyvsp[-4].pExpression),(yyvsp[-2].pExpression),(yyvsp[-1].pExpression),tokRangeAt(scanner,(yylsp[-2]),(yylsp[0])),false,false); } break; case 961: /* array_comprehension: '[' "for" '(' variable_name_with_pos_list "in" expr_list ')' "end of expression" expr2 array_comprehension_where ']' */ - { - (yyval.pExpression) = ast_arrayComprehension(scanner,tokAt(scanner,(yylsp[-9])),(yyvsp[-7].pNameWithPosList),(yyvsp[-5].pExpression),(yyvsp[-2].pExpression),(yyvsp[-1].pExpression),tokRangeAt(scanner,(yylsp[-2]),(yylsp[0])),false,false); + { + (yyval.pExpression) = ast_arrayComprehension(scanner,tokAt(scanner,(yylsp[-9])),(yyvsp[-7].pNameWithPosList),(yyvsp[-5].pExpression),(yyvsp[-2].pExpression),(yyvsp[-1].pExpression),tokRangeAt(scanner,(yylsp[-2]),(yylsp[0])),false,false); } break; case 962: /* array_comprehension: '[' "iterator" "for" '(' variable_name_with_pos_list "in" expr_list ')' "end of expression" expr2 array_comprehension_where ']' */ - { - (yyval.pExpression) = ast_arrayComprehension(scanner,tokAt(scanner,(yylsp[-9])),(yyvsp[-7].pNameWithPosList),(yyvsp[-5].pExpression),(yyvsp[-2].pExpression),(yyvsp[-1].pExpression),tokRangeAt(scanner,(yylsp[-2]),(yylsp[0])),true,false); + { + (yyval.pExpression) = ast_arrayComprehension(scanner,tokAt(scanner,(yylsp[-9])),(yyvsp[-7].pNameWithPosList),(yyvsp[-5].pExpression),(yyvsp[-2].pExpression),(yyvsp[-1].pExpression),tokRangeAt(scanner,(yylsp[-2]),(yylsp[0])),true,false); } break; case 963: /* array_comprehension: "begin of code block" "for" '(' variable_name_with_pos_list "in" expr_list ')' "end of expression" make_map_tuple array_comprehension_where "end of code block" */ - { - (yyval.pExpression) = ast_arrayComprehension(scanner,tokAt(scanner,(yylsp[-9])),(yyvsp[-7].pNameWithPosList),(yyvsp[-5].pExpression),(yyvsp[-2].pExpression),(yyvsp[-1].pExpression),tokRangeAt(scanner,(yylsp[-2]),(yylsp[0])),false,true); + { + (yyval.pExpression) = ast_arrayComprehension(scanner,tokAt(scanner,(yylsp[-9])),(yyvsp[-7].pNameWithPosList),(yyvsp[-5].pExpression),(yyvsp[-2].pExpression),(yyvsp[-1].pExpression),tokRangeAt(scanner,(yylsp[-2]),(yylsp[0])),false,true); } break; case 964: /* array_comprehension: '[' "iterator" "for" variable_name_with_pos_list "in" expr_list "end of expression" expr2 array_comprehension_where ']' */ - { - if (format::is_replace_braces() && format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-6]))))) { - format::get_writer() << "(" << format::get_substring(format::Pos::from(tokAt(scanner,(yylsp[-6]))), - format::Pos::from_last(tokAt(scanner,(yylsp[-4])))) << ")"; - format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[-4])))); - } - (yyval.pExpression) = ast_arrayComprehension(scanner,tokAt(scanner,(yylsp[-7])),(yyvsp[-6].pNameWithPosList),(yyvsp[-4].pExpression),(yyvsp[-2].pExpression),(yyvsp[-1].pExpression),tokRangeAt(scanner,(yylsp[-2]),(yylsp[0])),true,false); + { + if (format::is_replace_braces() && format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-6]))))) { + format::get_writer() << "(" << format::get_substring(format::Pos::from(tokAt(scanner,(yylsp[-6]))), + format::Pos::from_last(tokAt(scanner,(yylsp[-4])))) << ")"; + format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[-4])))); + } + (yyval.pExpression) = ast_arrayComprehension(scanner,tokAt(scanner,(yylsp[-7])),(yyvsp[-6].pNameWithPosList),(yyvsp[-4].pExpression),(yyvsp[-2].pExpression),(yyvsp[-1].pExpression),tokRangeAt(scanner,(yylsp[-2]),(yylsp[0])),true,false); } break; case 965: /* array_comprehension: "[[" "for" variable_name_with_pos_list "in" expr_list "end of expression" expr2 array_comprehension_where ']' ']' */ - { - // std::cout << "case5" << std::endl; - if (format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-9]))))) { - auto internal = format::get_substring(format::Pos::from(tokAt(scanner,(yylsp[-8]))), format::Pos::from_last(tokAt(scanner,(yylsp[-2])))); - format::get_writer() << "[iterator " << internal << "]"; - format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); - } - (yyval.pExpression) = ast_arrayComprehension(scanner,tokAt(scanner,(yylsp[-8])),(yyvsp[-7].pNameWithPosList),(yyvsp[-5].pExpression),(yyvsp[-3].pExpression),(yyvsp[-2].pExpression),tokRangeAt(scanner,(yylsp[-3]),(yylsp[0])),true,false); + { + // std::cout << "case5" << std::endl; + if (format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-9]))))) { + auto internal = format::get_substring(format::Pos::from(tokAt(scanner,(yylsp[-8]))), format::Pos::from_last(tokAt(scanner,(yylsp[-2])))); + format::get_writer() << "[iterator " << internal << "]"; + format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); + } + (yyval.pExpression) = ast_arrayComprehension(scanner,tokAt(scanner,(yylsp[-8])),(yyvsp[-7].pNameWithPosList),(yyvsp[-5].pExpression),(yyvsp[-3].pExpression),(yyvsp[-2].pExpression),tokRangeAt(scanner,(yylsp[-3]),(yylsp[0])),true,false); } break; case 966: /* array_comprehension: "[{" "for" variable_name_with_pos_list "in" expr_list "end of expression" expr2 array_comprehension_where "end of code block" ']' */ - { - // std::cout << "case9" << std::endl; - if (format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-9]))))) { - auto internal = format::get_substring(format::Pos::from(tokAt(scanner,(yylsp[-8]))), format::Pos::from_last(tokAt(scanner,(yylsp[-2])))); - format::get_writer() << "[" << format::substring_between(tokAt(scanner, (yylsp[-9])), tokAt(scanner, (yylsp[-8]))) - << internal - << format::substring_between(tokAt(scanner, (yylsp[-2])), tokAt(scanner, (yylsp[-1]))) << "]"; - format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); - } - - (yyval.pExpression) = ast_arrayComprehension(scanner,tokAt(scanner,(yylsp[-8])),(yyvsp[-7].pNameWithPosList),(yyvsp[-5].pExpression),(yyvsp[-3].pExpression),(yyvsp[-2].pExpression),tokRangeAt(scanner,(yylsp[-3]),(yylsp[0])),false,false); + { + // std::cout << "case9" << std::endl; + if (format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-9]))))) { + auto internal = format::get_substring(format::Pos::from(tokAt(scanner,(yylsp[-8]))), format::Pos::from_last(tokAt(scanner,(yylsp[-2])))); + format::get_writer() << "[" << format::substring_between(tokAt(scanner, (yylsp[-9])), tokAt(scanner, (yylsp[-8]))) + << internal + << format::substring_between(tokAt(scanner, (yylsp[-2])), tokAt(scanner, (yylsp[-1]))) << "]"; + format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); + } + + (yyval.pExpression) = ast_arrayComprehension(scanner,tokAt(scanner,(yylsp[-8])),(yyvsp[-7].pNameWithPosList),(yyvsp[-5].pExpression),(yyvsp[-3].pExpression),(yyvsp[-2].pExpression),tokRangeAt(scanner,(yylsp[-3]),(yylsp[0])),false,false); } break; case 967: /* array_comprehension: open_block "for" variable_name_with_pos_list "in" expr_list "end of expression" make_map_tuple array_comprehension_where close_block */ - { - if (format::is_replace_braces() && format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-6]))))) { - format::get_writer() << "(" << format::substring_between(tokAt(scanner, (yylsp[-8])), tokAt(scanner, (yylsp[-7]))) - << format::get_substring(format::Pos::from(tokAt(scanner,(yylsp[-6]))), - format::Pos::from_last(tokAt(scanner,(yylsp[-4])))) - << format::substring_between(tokAt(scanner, (yylsp[-1])), tokAt(scanner, (yylsp[0]))) << ")"; - format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[-4])))); - } - (yyval.pExpression) = ast_arrayComprehension(scanner,tokAt(scanner,(yylsp[-7])),(yyvsp[-6].pNameWithPosList),(yyvsp[-4].pExpression),(yyvsp[-2].pExpression),(yyvsp[-1].pExpression),tokRangeAt(scanner,(yylsp[-2]),(yylsp[0])),false,true); + { + if (format::is_replace_braces() && format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-6]))))) { + format::get_writer() << "(" << format::substring_between(tokAt(scanner, (yylsp[-8])), tokAt(scanner, (yylsp[-7]))) + << format::get_substring(format::Pos::from(tokAt(scanner,(yylsp[-6]))), + format::Pos::from_last(tokAt(scanner,(yylsp[-4])))) + << format::substring_between(tokAt(scanner, (yylsp[-1])), tokAt(scanner, (yylsp[0]))) << ")"; + format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[-4])))); + } + (yyval.pExpression) = ast_arrayComprehension(scanner,tokAt(scanner,(yylsp[-7])),(yyvsp[-6].pNameWithPosList),(yyvsp[-4].pExpression),(yyvsp[-2].pExpression),(yyvsp[-1].pExpression),tokRangeAt(scanner,(yylsp[-2]),(yylsp[0])),false,true); } break; case 968: /* array_comprehension: "{{" "for" variable_name_with_pos_list "in" expr_list "end of expression" make_map_tuple array_comprehension_where close_block close_block */ - { - // std::cout << "case12" << std::endl; - if (format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-9]))))) { - auto internal = format::get_substring(format::Pos::from(tokAt(scanner,(yylsp[-8]))), format::Pos::from_last(tokAt(scanner,(yylsp[-2])))); - format::get_writer() << "[" << format::substring_between(tokAt(scanner, (yylsp[-9])), tokAt(scanner, (yylsp[-8]))) - << internal - << format::substring_between(tokAt(scanner, (yylsp[-2])), tokAt(scanner, (yylsp[-1]))) << "]"; - format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); - } - (yyval.pExpression) = ast_arrayComprehension(scanner,tokAt(scanner,(yylsp[-8])),(yyvsp[-7].pNameWithPosList),(yyvsp[-5].pExpression),(yyvsp[-3].pExpression),(yyvsp[-2].pExpression),tokRangeAt(scanner,(yylsp[-3]),(yylsp[0])),true,true); + { + // std::cout << "case12" << std::endl; + if (format::prepare_rule(format::Pos::from(tokAt(scanner,(yylsp[-9]))))) { + auto internal = format::get_substring(format::Pos::from(tokAt(scanner,(yylsp[-8]))), format::Pos::from_last(tokAt(scanner,(yylsp[-2])))); + format::get_writer() << "[" << format::substring_between(tokAt(scanner, (yylsp[-9])), tokAt(scanner, (yylsp[-8]))) + << internal + << format::substring_between(tokAt(scanner, (yylsp[-2])), tokAt(scanner, (yylsp[-1]))) << "]"; + format::finish_rule(format::Pos::from_last(tokAt(scanner,(yylsp[0])))); + } + (yyval.pExpression) = ast_arrayComprehension(scanner,tokAt(scanner,(yylsp[-8])),(yyvsp[-7].pNameWithPosList),(yyvsp[-5].pExpression),(yyvsp[-3].pExpression),(yyvsp[-2].pExpression),tokRangeAt(scanner,(yylsp[-3]),(yylsp[0])),true,true); } break; @@ -12962,4 +12964,4 @@ YYLTYPE yylloc = yyloc_default; return yyresult; } - + diff --git a/utils/dasFormatter/ds_parser.ypp b/utils/dasFormatter/ds_parser.ypp index 79ad3b63f..573727d8a 100644 --- a/utils/dasFormatter/ds_parser.ypp +++ b/utils/dasFormatter/ds_parser.ypp @@ -2349,10 +2349,12 @@ expr2 if ( $subexpr->rtti_isSequence() ) { auto mkt = new ExprMakeTuple(tokAt(scanner,@subexpr)); mkt->values = sequenceToList($subexpr); + mkt->shorthandRecordNames = ast_tupleCollectShorthandNames(mkt->values); $$ = mkt; } else if ( $comma ) { auto mkt = new ExprMakeTuple(tokAt(scanner,@subexpr)); mkt->values.push_back($subexpr); + mkt->shorthandRecordNames = ast_tupleCollectShorthandNames(mkt->values); $$ = mkt; } else { $subexpr->at = tokAt(scanner, @subexpr);