@galacean/engine-shaderlab 1.4.0-alpha.3 → 1.4.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -548,7 +548,7 @@
548
548
  /** , */ ETokenType[ETokenType["COMMA"] = 1032] = "COMMA";
549
549
  ETokenType[ETokenType["COLON"] = 1033] = "COLON";
550
550
  /** = */ ETokenType[ETokenType["EQUAL"] = 1034] = "EQUAL";
551
- ETokenType[ETokenType["SEMICOLON"] = 1035] = "SEMICOLON";
551
+ /** ; */ ETokenType[ETokenType["SEMICOLON"] = 1035] = "SEMICOLON";
552
552
  /** ! */ ETokenType[ETokenType["BANG"] = 1036] = "BANG";
553
553
  /** \- */ ETokenType[ETokenType["DASH"] = 1037] = "DASH";
554
554
  /** ~ */ ETokenType[ETokenType["TILDE"] = 1038] = "TILDE";
@@ -765,7 +765,8 @@
765
765
  };
766
766
  LexerUtils.isSpace = function isSpace(charCode) {
767
767
  return charCode === 9 || // Tab
768
- charCode === 10 || // Line break
768
+ charCode === 10 || // Line break - /n
769
+ charCode === 13 || // Carriage return -/r
769
770
  charCode === 32 // Space
770
771
  ;
771
772
  };
@@ -841,7 +842,11 @@
841
842
  var start = this.getCurPosition();
842
843
  this.advance(2);
843
844
  // single line comments
844
- while(this.getCurChar() !== "\n")this._advance();
845
+ var curChar = this.getCurChar();
846
+ while(curChar !== "\n" && curChar !== "\r" && !this.isEnd()){
847
+ this._advance();
848
+ curChar = this.getCurChar();
849
+ }
845
850
  this.skipCommentsAndSpace();
846
851
  return ShaderLab.createRange(start, this.getCurPosition());
847
852
  } else if (this.peek(2) === "/*") {
@@ -964,7 +969,8 @@
964
969
  BaseScanner._spaceCharsWithBreak = [
965
970
  " ",
966
971
  "\t",
967
- "\n"
972
+ "\n",
973
+ "\r"
968
974
  ];
969
975
  BaseScanner._spaceChars = [
970
976
  " ",
@@ -1559,101 +1565,103 @@
1559
1565
  // glsl
1560
1566
  NoneTerminal[NoneTerminal["global_declaration"] = 2002] = "global_declaration";
1561
1567
  NoneTerminal[NoneTerminal["variable_declaration"] = 2003] = "variable_declaration";
1562
- NoneTerminal[NoneTerminal["array_specifier_list"] = 2004] = "array_specifier_list";
1563
- NoneTerminal[NoneTerminal["array_specifier"] = 2005] = "array_specifier";
1564
- NoneTerminal[NoneTerminal["ext_builtin_type_specifier_nonarray"] = 2006] = "ext_builtin_type_specifier_nonarray";
1565
- NoneTerminal[NoneTerminal["precision_specifier"] = 2007] = "precision_specifier";
1566
- NoneTerminal[NoneTerminal["variable_identifier"] = 2008] = "variable_identifier";
1567
- NoneTerminal[NoneTerminal["variable_identifier_node"] = 2009] = "variable_identifier_node";
1568
- NoneTerminal[NoneTerminal["primary_expression"] = 2010] = "primary_expression";
1569
- NoneTerminal[NoneTerminal["postfix_expression"] = 2011] = "postfix_expression";
1570
- NoneTerminal[NoneTerminal["integer_expression"] = 2012] = "integer_expression";
1571
- NoneTerminal[NoneTerminal["function_call"] = 2013] = "function_call";
1572
- NoneTerminal[NoneTerminal["function_call_generic"] = 2014] = "function_call_generic";
1573
- NoneTerminal[NoneTerminal["function_call_header_no_parameters"] = 2015] = "function_call_header_no_parameters";
1574
- NoneTerminal[NoneTerminal["function_call_header_with_parameters"] = 2016] = "function_call_header_with_parameters";
1575
- NoneTerminal[NoneTerminal["function_call_parameter_list"] = 2017] = "function_call_parameter_list";
1576
- NoneTerminal[NoneTerminal["function_call_header"] = 2018] = "function_call_header";
1577
- NoneTerminal[NoneTerminal["function_identifier"] = 2019] = "function_identifier";
1578
- NoneTerminal[NoneTerminal["constructor_identifier"] = 2020] = "constructor_identifier";
1579
- NoneTerminal[NoneTerminal["unary_expression"] = 2021] = "unary_expression";
1580
- NoneTerminal[NoneTerminal["unary_operator"] = 2022] = "unary_operator";
1581
- NoneTerminal[NoneTerminal["multiplicative_expression"] = 2023] = "multiplicative_expression";
1582
- NoneTerminal[NoneTerminal["additive_expression"] = 2024] = "additive_expression";
1583
- NoneTerminal[NoneTerminal["shift_expression"] = 2025] = "shift_expression";
1584
- NoneTerminal[NoneTerminal["relational_expression"] = 2026] = "relational_expression";
1585
- NoneTerminal[NoneTerminal["equality_expression"] = 2027] = "equality_expression";
1586
- NoneTerminal[NoneTerminal["and_expression"] = 2028] = "and_expression";
1587
- NoneTerminal[NoneTerminal["inclusive_or_expression"] = 2029] = "inclusive_or_expression";
1588
- NoneTerminal[NoneTerminal["exclusive_or_expression"] = 2030] = "exclusive_or_expression";
1589
- NoneTerminal[NoneTerminal["logical_and_expression"] = 2031] = "logical_and_expression";
1590
- NoneTerminal[NoneTerminal["logical_xor_expression"] = 2032] = "logical_xor_expression";
1591
- NoneTerminal[NoneTerminal["logical_or_expression"] = 2033] = "logical_or_expression";
1592
- NoneTerminal[NoneTerminal["conditional_expression"] = 2034] = "conditional_expression";
1593
- NoneTerminal[NoneTerminal["assignment_expression"] = 2035] = "assignment_expression";
1594
- NoneTerminal[NoneTerminal["assignment_operator"] = 2036] = "assignment_operator";
1595
- NoneTerminal[NoneTerminal["expression"] = 2037] = "expression";
1596
- NoneTerminal[NoneTerminal["integer_constant_expression"] = 2038] = "integer_constant_expression";
1597
- NoneTerminal[NoneTerminal["integer_constant_expression_operator"] = 2039] = "integer_constant_expression_operator";
1598
- NoneTerminal[NoneTerminal["declaration"] = 2040] = "declaration";
1599
- NoneTerminal[NoneTerminal["function_prototype"] = 2041] = "function_prototype";
1600
- NoneTerminal[NoneTerminal["function_declarator"] = 2042] = "function_declarator";
1601
- NoneTerminal[NoneTerminal["function_header_with_parameters"] = 2043] = "function_header_with_parameters";
1602
- NoneTerminal[NoneTerminal["function_header"] = 2044] = "function_header";
1603
- NoneTerminal[NoneTerminal["function_parameter_list"] = 2045] = "function_parameter_list";
1604
- NoneTerminal[NoneTerminal["parameter_declarator"] = 2046] = "parameter_declarator";
1605
- NoneTerminal[NoneTerminal["parameter_declaration"] = 2047] = "parameter_declaration";
1606
- NoneTerminal[NoneTerminal["parameter_qualifier"] = 2048] = "parameter_qualifier";
1607
- NoneTerminal[NoneTerminal["parameter_type_specifier"] = 2049] = "parameter_type_specifier";
1608
- NoneTerminal[NoneTerminal["init_declarator_list"] = 2050] = "init_declarator_list";
1609
- NoneTerminal[NoneTerminal["single_declaration"] = 2051] = "single_declaration";
1610
- NoneTerminal[NoneTerminal["fully_specified_type"] = 2052] = "fully_specified_type";
1611
- NoneTerminal[NoneTerminal["type_qualifier"] = 2053] = "type_qualifier";
1612
- NoneTerminal[NoneTerminal["single_type_qualifier"] = 2054] = "single_type_qualifier";
1613
- NoneTerminal[NoneTerminal["storage_qualifier"] = 2055] = "storage_qualifier";
1614
- NoneTerminal[NoneTerminal["precision_qualifier"] = 2056] = "precision_qualifier";
1615
- NoneTerminal[NoneTerminal["interpolation_qualifier"] = 2057] = "interpolation_qualifier";
1616
- NoneTerminal[NoneTerminal["invariant_qualifier"] = 2058] = "invariant_qualifier";
1617
- NoneTerminal[NoneTerminal["type_specifier"] = 2059] = "type_specifier";
1618
- NoneTerminal[NoneTerminal["type_specifier_nonarray"] = 2060] = "type_specifier_nonarray";
1619
- NoneTerminal[NoneTerminal["type_specifier_no_prec"] = 2061] = "type_specifier_no_prec";
1620
- NoneTerminal[NoneTerminal["basic_type"] = 2062] = "basic_type";
1621
- NoneTerminal[NoneTerminal["struct_specifier"] = 2063] = "struct_specifier";
1622
- NoneTerminal[NoneTerminal["struct_declaration_list"] = 2064] = "struct_declaration_list";
1623
- NoneTerminal[NoneTerminal["struct_declaration"] = 2065] = "struct_declaration";
1624
- NoneTerminal[NoneTerminal["layout_qualifier"] = 2066] = "layout_qualifier";
1625
- NoneTerminal[NoneTerminal["struct_declarator_list"] = 2067] = "struct_declarator_list";
1626
- NoneTerminal[NoneTerminal["struct_declarator"] = 2068] = "struct_declarator";
1627
- NoneTerminal[NoneTerminal["identifier_list"] = 2069] = "identifier_list";
1628
- NoneTerminal[NoneTerminal["decl_identifier"] = 2070] = "decl_identifier";
1629
- NoneTerminal[NoneTerminal["initializer"] = 2071] = "initializer";
1630
- NoneTerminal[NoneTerminal["initializer_list"] = 2072] = "initializer_list";
1631
- NoneTerminal[NoneTerminal["declaration_statement"] = 2073] = "declaration_statement";
1632
- NoneTerminal[NoneTerminal["simple_statement"] = 2074] = "simple_statement";
1633
- NoneTerminal[NoneTerminal["compound_statement_no_scope"] = 2075] = "compound_statement_no_scope";
1634
- NoneTerminal[NoneTerminal["statement_with_scope"] = 2076] = "statement_with_scope";
1635
- NoneTerminal[NoneTerminal["compound_statement"] = 2077] = "compound_statement";
1636
- NoneTerminal[NoneTerminal["statement"] = 2078] = "statement";
1637
- NoneTerminal[NoneTerminal["statement_list"] = 2079] = "statement_list";
1638
- NoneTerminal[NoneTerminal["iteration_statement_no_new_scope"] = 2080] = "iteration_statement_no_new_scope";
1639
- NoneTerminal[NoneTerminal["expression_statement"] = 2081] = "expression_statement";
1640
- NoneTerminal[NoneTerminal["selection_statement"] = 2082] = "selection_statement";
1641
- NoneTerminal[NoneTerminal["selection_rest_statement"] = 2083] = "selection_rest_statement";
1642
- NoneTerminal[NoneTerminal["condition"] = 2084] = "condition";
1643
- NoneTerminal[NoneTerminal["conditionopt"] = 2085] = "conditionopt";
1644
- NoneTerminal[NoneTerminal["iteration_statement"] = 2086] = "iteration_statement";
1645
- NoneTerminal[NoneTerminal["for_init_statement"] = 2087] = "for_init_statement";
1646
- NoneTerminal[NoneTerminal["for_rest_statement"] = 2088] = "for_rest_statement";
1647
- NoneTerminal[NoneTerminal["jump_statement"] = 2089] = "jump_statement";
1648
- NoneTerminal[NoneTerminal["external_declaration"] = 2090] = "external_declaration";
1649
- NoneTerminal[NoneTerminal["function_definition"] = 2091] = "function_definition";
1650
- NoneTerminal[NoneTerminal["field_selection"] = 2092] = "field_selection";
1651
- NoneTerminal[NoneTerminal["bool_constant"] = 2093] = "bool_constant";
1652
- NoneTerminal[NoneTerminal["function_identifier_node"] = 2094] = "function_identifier_node";
1653
- NoneTerminal[NoneTerminal["typename_identifier_node"] = 2095] = "typename_identifier_node";
1654
- NoneTerminal[NoneTerminal["scope_brace"] = 2096] = "scope_brace";
1655
- NoneTerminal[NoneTerminal["scope_end_brace"] = 2097] = "scope_end_brace";
1656
- NoneTerminal[NoneTerminal["_ignore"] = 2098] = "_ignore";
1568
+ NoneTerminal[NoneTerminal["variable_declaration_list"] = 2004] = "variable_declaration_list";
1569
+ NoneTerminal[NoneTerminal["variable_declaration_statement"] = 2005] = "variable_declaration_statement";
1570
+ NoneTerminal[NoneTerminal["array_specifier_list"] = 2006] = "array_specifier_list";
1571
+ NoneTerminal[NoneTerminal["array_specifier"] = 2007] = "array_specifier";
1572
+ NoneTerminal[NoneTerminal["ext_builtin_type_specifier_nonarray"] = 2008] = "ext_builtin_type_specifier_nonarray";
1573
+ NoneTerminal[NoneTerminal["precision_specifier"] = 2009] = "precision_specifier";
1574
+ NoneTerminal[NoneTerminal["variable_identifier"] = 2010] = "variable_identifier";
1575
+ NoneTerminal[NoneTerminal["variable_identifier_node"] = 2011] = "variable_identifier_node";
1576
+ NoneTerminal[NoneTerminal["primary_expression"] = 2012] = "primary_expression";
1577
+ NoneTerminal[NoneTerminal["postfix_expression"] = 2013] = "postfix_expression";
1578
+ NoneTerminal[NoneTerminal["integer_expression"] = 2014] = "integer_expression";
1579
+ NoneTerminal[NoneTerminal["function_call"] = 2015] = "function_call";
1580
+ NoneTerminal[NoneTerminal["function_call_generic"] = 2016] = "function_call_generic";
1581
+ NoneTerminal[NoneTerminal["function_call_header_no_parameters"] = 2017] = "function_call_header_no_parameters";
1582
+ NoneTerminal[NoneTerminal["function_call_header_with_parameters"] = 2018] = "function_call_header_with_parameters";
1583
+ NoneTerminal[NoneTerminal["function_call_parameter_list"] = 2019] = "function_call_parameter_list";
1584
+ NoneTerminal[NoneTerminal["function_call_header"] = 2020] = "function_call_header";
1585
+ NoneTerminal[NoneTerminal["function_identifier"] = 2021] = "function_identifier";
1586
+ NoneTerminal[NoneTerminal["constructor_identifier"] = 2022] = "constructor_identifier";
1587
+ NoneTerminal[NoneTerminal["unary_expression"] = 2023] = "unary_expression";
1588
+ NoneTerminal[NoneTerminal["unary_operator"] = 2024] = "unary_operator";
1589
+ NoneTerminal[NoneTerminal["multiplicative_expression"] = 2025] = "multiplicative_expression";
1590
+ NoneTerminal[NoneTerminal["additive_expression"] = 2026] = "additive_expression";
1591
+ NoneTerminal[NoneTerminal["shift_expression"] = 2027] = "shift_expression";
1592
+ NoneTerminal[NoneTerminal["relational_expression"] = 2028] = "relational_expression";
1593
+ NoneTerminal[NoneTerminal["equality_expression"] = 2029] = "equality_expression";
1594
+ NoneTerminal[NoneTerminal["and_expression"] = 2030] = "and_expression";
1595
+ NoneTerminal[NoneTerminal["inclusive_or_expression"] = 2031] = "inclusive_or_expression";
1596
+ NoneTerminal[NoneTerminal["exclusive_or_expression"] = 2032] = "exclusive_or_expression";
1597
+ NoneTerminal[NoneTerminal["logical_and_expression"] = 2033] = "logical_and_expression";
1598
+ NoneTerminal[NoneTerminal["logical_xor_expression"] = 2034] = "logical_xor_expression";
1599
+ NoneTerminal[NoneTerminal["logical_or_expression"] = 2035] = "logical_or_expression";
1600
+ NoneTerminal[NoneTerminal["conditional_expression"] = 2036] = "conditional_expression";
1601
+ NoneTerminal[NoneTerminal["assignment_expression"] = 2037] = "assignment_expression";
1602
+ NoneTerminal[NoneTerminal["assignment_operator"] = 2038] = "assignment_operator";
1603
+ NoneTerminal[NoneTerminal["expression"] = 2039] = "expression";
1604
+ NoneTerminal[NoneTerminal["integer_constant_expression"] = 2040] = "integer_constant_expression";
1605
+ NoneTerminal[NoneTerminal["integer_constant_expression_operator"] = 2041] = "integer_constant_expression_operator";
1606
+ NoneTerminal[NoneTerminal["declaration"] = 2042] = "declaration";
1607
+ NoneTerminal[NoneTerminal["function_prototype"] = 2043] = "function_prototype";
1608
+ NoneTerminal[NoneTerminal["function_declarator"] = 2044] = "function_declarator";
1609
+ NoneTerminal[NoneTerminal["function_header_with_parameters"] = 2045] = "function_header_with_parameters";
1610
+ NoneTerminal[NoneTerminal["function_header"] = 2046] = "function_header";
1611
+ NoneTerminal[NoneTerminal["function_parameter_list"] = 2047] = "function_parameter_list";
1612
+ NoneTerminal[NoneTerminal["parameter_declarator"] = 2048] = "parameter_declarator";
1613
+ NoneTerminal[NoneTerminal["parameter_declaration"] = 2049] = "parameter_declaration";
1614
+ NoneTerminal[NoneTerminal["parameter_qualifier"] = 2050] = "parameter_qualifier";
1615
+ NoneTerminal[NoneTerminal["parameter_type_specifier"] = 2051] = "parameter_type_specifier";
1616
+ NoneTerminal[NoneTerminal["init_declarator_list"] = 2052] = "init_declarator_list";
1617
+ NoneTerminal[NoneTerminal["single_declaration"] = 2053] = "single_declaration";
1618
+ NoneTerminal[NoneTerminal["fully_specified_type"] = 2054] = "fully_specified_type";
1619
+ NoneTerminal[NoneTerminal["type_qualifier"] = 2055] = "type_qualifier";
1620
+ NoneTerminal[NoneTerminal["single_type_qualifier"] = 2056] = "single_type_qualifier";
1621
+ NoneTerminal[NoneTerminal["storage_qualifier"] = 2057] = "storage_qualifier";
1622
+ NoneTerminal[NoneTerminal["precision_qualifier"] = 2058] = "precision_qualifier";
1623
+ NoneTerminal[NoneTerminal["interpolation_qualifier"] = 2059] = "interpolation_qualifier";
1624
+ NoneTerminal[NoneTerminal["invariant_qualifier"] = 2060] = "invariant_qualifier";
1625
+ NoneTerminal[NoneTerminal["type_specifier"] = 2061] = "type_specifier";
1626
+ NoneTerminal[NoneTerminal["type_specifier_nonarray"] = 2062] = "type_specifier_nonarray";
1627
+ NoneTerminal[NoneTerminal["type_specifier_no_prec"] = 2063] = "type_specifier_no_prec";
1628
+ NoneTerminal[NoneTerminal["basic_type"] = 2064] = "basic_type";
1629
+ NoneTerminal[NoneTerminal["struct_specifier"] = 2065] = "struct_specifier";
1630
+ NoneTerminal[NoneTerminal["struct_declaration_list"] = 2066] = "struct_declaration_list";
1631
+ NoneTerminal[NoneTerminal["struct_declaration"] = 2067] = "struct_declaration";
1632
+ NoneTerminal[NoneTerminal["layout_qualifier"] = 2068] = "layout_qualifier";
1633
+ NoneTerminal[NoneTerminal["struct_declarator_list"] = 2069] = "struct_declarator_list";
1634
+ NoneTerminal[NoneTerminal["struct_declarator"] = 2070] = "struct_declarator";
1635
+ NoneTerminal[NoneTerminal["identifier_list"] = 2071] = "identifier_list";
1636
+ NoneTerminal[NoneTerminal["decl_identifier"] = 2072] = "decl_identifier";
1637
+ NoneTerminal[NoneTerminal["initializer"] = 2073] = "initializer";
1638
+ NoneTerminal[NoneTerminal["initializer_list"] = 2074] = "initializer_list";
1639
+ NoneTerminal[NoneTerminal["declaration_statement"] = 2075] = "declaration_statement";
1640
+ NoneTerminal[NoneTerminal["simple_statement"] = 2076] = "simple_statement";
1641
+ NoneTerminal[NoneTerminal["compound_statement_no_scope"] = 2077] = "compound_statement_no_scope";
1642
+ NoneTerminal[NoneTerminal["statement_with_scope"] = 2078] = "statement_with_scope";
1643
+ NoneTerminal[NoneTerminal["compound_statement"] = 2079] = "compound_statement";
1644
+ NoneTerminal[NoneTerminal["statement"] = 2080] = "statement";
1645
+ NoneTerminal[NoneTerminal["statement_list"] = 2081] = "statement_list";
1646
+ NoneTerminal[NoneTerminal["iteration_statement_no_new_scope"] = 2082] = "iteration_statement_no_new_scope";
1647
+ NoneTerminal[NoneTerminal["expression_statement"] = 2083] = "expression_statement";
1648
+ NoneTerminal[NoneTerminal["selection_statement"] = 2084] = "selection_statement";
1649
+ NoneTerminal[NoneTerminal["selection_rest_statement"] = 2085] = "selection_rest_statement";
1650
+ NoneTerminal[NoneTerminal["condition"] = 2086] = "condition";
1651
+ NoneTerminal[NoneTerminal["conditionopt"] = 2087] = "conditionopt";
1652
+ NoneTerminal[NoneTerminal["iteration_statement"] = 2088] = "iteration_statement";
1653
+ NoneTerminal[NoneTerminal["for_init_statement"] = 2089] = "for_init_statement";
1654
+ NoneTerminal[NoneTerminal["for_rest_statement"] = 2090] = "for_rest_statement";
1655
+ NoneTerminal[NoneTerminal["jump_statement"] = 2091] = "jump_statement";
1656
+ NoneTerminal[NoneTerminal["external_declaration"] = 2092] = "external_declaration";
1657
+ NoneTerminal[NoneTerminal["function_definition"] = 2093] = "function_definition";
1658
+ NoneTerminal[NoneTerminal["field_selection"] = 2094] = "field_selection";
1659
+ NoneTerminal[NoneTerminal["bool_constant"] = 2095] = "bool_constant";
1660
+ NoneTerminal[NoneTerminal["function_identifier_node"] = 2096] = "function_identifier_node";
1661
+ NoneTerminal[NoneTerminal["typename_identifier_node"] = 2097] = "typename_identifier_node";
1662
+ NoneTerminal[NoneTerminal["scope_brace"] = 2098] = "scope_brace";
1663
+ NoneTerminal[NoneTerminal["scope_end_brace"] = 2099] = "scope_end_brace";
1664
+ NoneTerminal[NoneTerminal["_ignore"] = 2100] = "_ignore";
1657
1665
  return NoneTerminal;
1658
1666
  }({});
1659
1667
 
@@ -1750,38 +1758,43 @@
1750
1758
  list.push(fn);
1751
1759
  BuiltinFunctionTable.set(ident, list);
1752
1760
  };
1753
- BuiltinFunction.getFn = function getFn(ident) {
1754
- for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){
1755
- args[_key - 1] = arguments[_key];
1756
- }
1761
+ BuiltinFunction.getFn = function getFn(ident, parameterTypes) {
1757
1762
  var list = BuiltinFunctionTable.get(ident);
1758
- var realType = TypeAny;
1759
- if (list == null ? void 0 : list.length) {
1760
- var fun = list.find(function(item) {
1761
- if (item.args.length !== args.length) return false;
1762
- var genType = 0;
1763
- for(var i = 0; i < args.length; i++){
1764
- if (args[i] === TypeAny) continue;
1765
- realType = args[i];
1766
- if (isGenericType(item.args[i])) {
1767
- if (genType === 0) {
1768
- genType = args[i];
1769
- continue;
1770
- } else {
1771
- realType = genType;
1763
+ if (list) {
1764
+ for(var length = list.length, i = 0; i < length; i++){
1765
+ var fn = list[i];
1766
+ var fnArgs = fn.args;
1767
+ var argLength = fnArgs.length;
1768
+ if (argLength !== parameterTypes.length) continue;
1769
+ // Try to match generic parameter type.
1770
+ var returnType = TypeAny;
1771
+ var found = true;
1772
+ for(var i1 = 0; i1 < argLength; i1++){
1773
+ var curFnArg = fnArgs[i1];
1774
+ if (isGenericType(curFnArg)) {
1775
+ if (returnType === TypeAny) returnType = parameterTypes[i1];
1776
+ } else {
1777
+ if (curFnArg !== parameterTypes[i1] && parameterTypes[i1] !== TypeAny) {
1778
+ found = false;
1779
+ break;
1772
1780
  }
1773
1781
  }
1774
- if (args[i] === TypeAny) continue;
1775
- if (args[i] !== realType) return false;
1776
1782
  }
1777
- return true;
1778
- });
1779
- if (fun) return {
1780
- fun: fun,
1781
- genType: realType
1782
- };
1783
+ if (found) {
1784
+ fn._realReturnType = returnType;
1785
+ return fn;
1786
+ }
1787
+ }
1783
1788
  }
1784
1789
  };
1790
+ _create_class(BuiltinFunction, [
1791
+ {
1792
+ key: "realReturnType",
1793
+ get: function get() {
1794
+ return this._realReturnType;
1795
+ }
1796
+ }
1797
+ ]);
1785
1798
  return BuiltinFunction;
1786
1799
  }();
1787
1800
  BuiltinFunction._create("radians", 200, 200);
@@ -1916,8 +1929,8 @@
1916
1929
  BuiltinFunction._create("textureSize", EKeyword.IVEC2, EKeyword.SAMPLER_CUBE_SHADOW, EKeyword.INT);
1917
1930
  BuiltinFunction._create("textureSize", EKeyword.IVEC3, 213, EKeyword.INT);
1918
1931
  BuiltinFunction._create("textureSize", EKeyword.IVEC3, EKeyword.SAMPLER2D_ARRAY_SHADOW, EKeyword.INT);
1919
- BuiltinFunction._create("texture2D", EKeyword.SAMPLER2D, EKeyword.VEC2);
1920
- BuiltinFunction._create("texture2D", EKeyword.SAMPLER2D, EKeyword.VEC2, EKeyword.FLOAT);
1932
+ BuiltinFunction._create("texture2D", EKeyword.VEC4, EKeyword.SAMPLER2D, EKeyword.VEC2);
1933
+ BuiltinFunction._create("texture2D", EKeyword.VEC4, EKeyword.SAMPLER2D, EKeyword.VEC2, EKeyword.FLOAT);
1921
1934
  BuiltinFunction._create("texture", 209, 210, EKeyword.VEC2, EKeyword.FLOAT);
1922
1935
  BuiltinFunction._create("texture", 209, 210, EKeyword.VEC2);
1923
1936
  BuiltinFunction._create("texture", 209, 211, EKeyword.VEC3, EKeyword.FLOAT);
@@ -1944,9 +1957,12 @@
1944
1957
  BuiltinFunction._create("textureLod", 209, 212, EKeyword.VEC3, EKeyword.FLOAT);
1945
1958
  BuiltinFunction._create("textureLod", EKeyword.FLOAT, EKeyword.SAMPLER2D_SHADOW, EKeyword.VEC3, EKeyword.FLOAT);
1946
1959
  BuiltinFunction._create("textureLod", 209, 213, EKeyword.VEC3, EKeyword.FLOAT);
1960
+ BuiltinFunction._create("texture2DLodEXT", 209, 210, EKeyword.VEC2, EKeyword.FLOAT);
1961
+ BuiltinFunction._create("texture2DLodEXT", 209, 211, EKeyword.VEC3, EKeyword.FLOAT);
1947
1962
  BuiltinFunction._create("textureCube", EKeyword.SAMPLER_CUBE, EKeyword.VEC3);
1948
1963
  BuiltinFunction._create("textureCube", EKeyword.SAMPLER_CUBE, EKeyword.VEC3, EKeyword.FLOAT);
1949
1964
  BuiltinFunction._create("textureCubeLod", EKeyword.SAMPLER_CUBE, EKeyword.VEC3, EKeyword.FLOAT);
1965
+ BuiltinFunction._create("textureCubeLodEXT", 209, 212, EKeyword.VEC3, EKeyword.FLOAT);
1950
1966
  BuiltinFunction._create("textureOffset", 209, 210, EKeyword.VEC2, EKeyword.IVEC2, EKeyword.FLOAT);
1951
1967
  BuiltinFunction._create("textureOffset", 209, 210, EKeyword.VEC2, EKeyword.IVEC2);
1952
1968
  BuiltinFunction._create("textureOffset", 209, 211, EKeyword.VEC3, EKeyword.IVEC3, EKeyword.FLOAT);
@@ -2280,7 +2296,9 @@
2280
2296
  _proto.codeGen = function codeGen(visitor) {
2281
2297
  return visitor.defaultCodeGen(this.children);
2282
2298
  };
2283
- _proto.semanticAnalyze = function semanticAnalyze(sa) {};
2299
+ /**
2300
+ * Do semantic analyze right after the ast node is generated.
2301
+ */ _proto.semanticAnalyze = function semanticAnalyze(sa) {};
2284
2302
  _create_class(TreeNode, [
2285
2303
  {
2286
2304
  key: "children",
@@ -2523,19 +2541,26 @@
2523
2541
  this.arraySpecifier = undefined;
2524
2542
  };
2525
2543
  _proto.semanticAnalyze = function semanticAnalyze(sa) {
2526
- var fullyType = this.children[0];
2527
- var id = this.children[1];
2528
- this.typeSpecifier = fullyType.typeSpecifier;
2544
+ var children = this.children;
2545
+ var childrenLen = children.length;
2546
+ var fullyType = children[0];
2547
+ var typeSpecifier = fullyType.typeSpecifier;
2548
+ this.typeSpecifier = typeSpecifier;
2549
+ this.arraySpecifier = typeSpecifier.arraySpecifier;
2550
+ var id = children[1];
2529
2551
  var sm;
2530
- if (this.children.length === 2 || this.children.length === 4) {
2531
- var symbolType = new SymbolType(fullyType.type, fullyType.typeSpecifier.lexeme);
2532
- var initializer = this.children[3];
2552
+ if (childrenLen === 2 || childrenLen === 4) {
2553
+ var symbolType = new SymbolType(fullyType.type, typeSpecifier.lexeme, this.arraySpecifier);
2554
+ var initializer = children[3];
2533
2555
  sm = new VarSymbol(id.lexeme, symbolType, false, initializer);
2534
2556
  } else {
2535
- var arraySpecifier = this.children[2];
2557
+ var arraySpecifier = children[2];
2558
+ if (arraySpecifier && this.arraySpecifier) {
2559
+ sa.reportError(arraySpecifier.location, "Array of array is not supported.");
2560
+ }
2536
2561
  this.arraySpecifier = arraySpecifier;
2537
- var symbolType1 = new SymbolType(fullyType.type, fullyType.typeSpecifier.lexeme, arraySpecifier);
2538
- var initializer1 = this.children[4];
2562
+ var symbolType1 = new SymbolType(fullyType.type, typeSpecifier.lexeme, this.arraySpecifier);
2563
+ var initializer1 = children[4];
2539
2564
  sm = new VarSymbol(id.lexeme, symbolType1, false, initializer1);
2540
2565
  }
2541
2566
  sa.symbolTableStack.insert(sm);
@@ -2717,6 +2742,12 @@
2717
2742
  return (_this_children = this.children) == null ? void 0 : (_this_children_ = _this_children[1]) == null ? void 0 : _this_children_.size;
2718
2743
  }
2719
2744
  },
2745
+ {
2746
+ key: "arraySpecifier",
2747
+ get: function get() {
2748
+ return this.children[1];
2749
+ }
2750
+ },
2720
2751
  {
2721
2752
  key: "isCustom",
2722
2753
  get: function get() {
@@ -3376,7 +3407,6 @@
3376
3407
  if (functionIdentifier.isBuiltin) {
3377
3408
  this.type = functionIdentifier.ident;
3378
3409
  } else {
3379
- var _BuiltinFunction;
3380
3410
  var _fnSymbol_dataType;
3381
3411
  var fnIdent = functionIdentifier.ident;
3382
3412
  var paramSig;
@@ -3386,11 +3416,9 @@
3386
3416
  paramSig = paramList.paramSig;
3387
3417
  }
3388
3418
  }
3389
- var builtinFn = (_BuiltinFunction = BuiltinFunction).getFn.apply(_BuiltinFunction, [].concat([
3390
- fnIdent
3391
- ], paramSig != null ? paramSig : []));
3419
+ var builtinFn = BuiltinFunction.getFn(fnIdent, paramSig);
3392
3420
  if (builtinFn) {
3393
- this.type = BuiltinFunction.getReturnType(builtinFn.fun, builtinFn.genType);
3421
+ this.type = builtinFn.realReturnType;
3394
3422
  return;
3395
3423
  }
3396
3424
  var fnSymbol = sa.lookupSymbolBy(fnIdent, ESymbolType.FN, paramSig);
@@ -4075,14 +4103,15 @@
4075
4103
  }
4076
4104
  var _proto = VariableDeclaration.prototype;
4077
4105
  _proto.semanticAnalyze = function semanticAnalyze(sa) {
4078
- var type = this.children[0];
4079
- var ident = this.children[1];
4080
- var sm;
4081
- sm = new VarSymbol(ident.lexeme, new SymbolType(type.type, type.typeSpecifier.lexeme), true, this);
4106
+ var children = this.children;
4107
+ var type = children[0];
4108
+ var ident = children[1];
4109
+ this.type = type;
4110
+ var sm = new VarSymbol(ident.lexeme, new SymbolType(type.type, type.typeSpecifier.lexeme), true, this);
4082
4111
  sa.symbolTableStack.insert(sm);
4083
4112
  };
4084
4113
  _proto.codeGen = function codeGen(visitor) {
4085
- return visitor.visitGlobalVariableDeclaration(this);
4114
+ return visitor.visitGlobalVariableDeclaration(this) + ";";
4086
4115
  };
4087
4116
  return VariableDeclaration;
4088
4117
  }(TreeNode);
@@ -4090,6 +4119,45 @@
4090
4119
  VariableDeclaration = __decorate([
4091
4120
  ASTNodeDecorator(NoneTerminal.variable_declaration)
4092
4121
  ], VariableDeclaration);
4122
+ var VariableDeclarationList = /*#__PURE__*/ function(TreeNode) {
4123
+ _inherits(VariableDeclarationList, TreeNode);
4124
+ function VariableDeclarationList() {
4125
+ return TreeNode.apply(this, arguments) || this;
4126
+ }
4127
+ var _proto = VariableDeclarationList.prototype;
4128
+ _proto.semanticAnalyze = function semanticAnalyze(sa) {
4129
+ var children = this.children;
4130
+ var length = children.length;
4131
+ var variableDeclaration = children[0];
4132
+ var type = variableDeclaration.type;
4133
+ this.type = type;
4134
+ if (length === 1) {
4135
+ return;
4136
+ }
4137
+ var ident = children[2];
4138
+ var newVariable = VariableDeclaration.pool.get();
4139
+ if (length === 3) {
4140
+ // variable_declaration_list ',' id
4141
+ newVariable.set(ident.location, [
4142
+ type,
4143
+ ident
4144
+ ]);
4145
+ } else {
4146
+ // variable_declaration_list ',' id array_specifier
4147
+ newVariable.set(ident.location, [
4148
+ type,
4149
+ ident,
4150
+ children[3]
4151
+ ]);
4152
+ }
4153
+ newVariable.semanticAnalyze(sa);
4154
+ };
4155
+ return VariableDeclarationList;
4156
+ }(TreeNode);
4157
+ ASTNode.VariableDeclarationList = VariableDeclarationList;
4158
+ VariableDeclarationList = __decorate([
4159
+ ASTNodeDecorator(NoneTerminal.variable_declaration_list)
4160
+ ], VariableDeclarationList);
4093
4161
  var VariableIdentifier = /*#__PURE__*/ function(TreeNode) {
4094
4162
  _inherits(VariableIdentifier, TreeNode);
4095
4163
  function VariableIdentifier() {
@@ -4228,7 +4296,7 @@
4228
4296
  NoneTerminal.precision_specifier
4229
4297
  ],
4230
4298
  [
4231
- NoneTerminal.variable_declaration
4299
+ NoneTerminal.variable_declaration_statement
4232
4300
  ],
4233
4301
  [
4234
4302
  NoneTerminal.struct_specifier
@@ -4238,22 +4306,35 @@
4238
4306
  ]
4239
4307
  ]), GrammarUtils.createProductionWithOptions(NoneTerminal.variable_declaration, [
4240
4308
  [
4241
- EKeyword.GS_RenderQueueType,
4242
- ETokenType.ID,
4243
- ETokenType.SEMICOLON
4309
+ NoneTerminal.fully_specified_type,
4310
+ ETokenType.ID
4244
4311
  ],
4245
4312
  [
4246
4313
  NoneTerminal.fully_specified_type,
4247
4314
  ETokenType.ID,
4248
- ETokenType.SEMICOLON
4315
+ NoneTerminal.array_specifier
4316
+ ]
4317
+ ], ASTNode.VariableDeclaration.pool), GrammarUtils.createProductionWithOptions(NoneTerminal.variable_declaration_list, [
4318
+ [
4319
+ NoneTerminal.variable_declaration
4249
4320
  ],
4250
4321
  [
4251
- NoneTerminal.fully_specified_type,
4322
+ NoneTerminal.variable_declaration_list,
4323
+ ETokenType.COMMA,
4324
+ ETokenType.ID
4325
+ ],
4326
+ [
4327
+ NoneTerminal.variable_declaration_list,
4328
+ ETokenType.COMMA,
4252
4329
  ETokenType.ID,
4253
- NoneTerminal.array_specifier,
4330
+ NoneTerminal.array_specifier
4331
+ ]
4332
+ ], ASTNode.VariableDeclarationList.pool), GrammarUtils.createProductionWithOptions(NoneTerminal.variable_declaration_statement, [
4333
+ [
4334
+ NoneTerminal.variable_declaration_list,
4254
4335
  ETokenType.SEMICOLON
4255
4336
  ]
4256
- ], ASTNode.VariableDeclaration.pool), GrammarUtils.createProductionWithOptions(NoneTerminal.ext_builtin_type_specifier_nonarray, [
4337
+ ]), GrammarUtils.createProductionWithOptions(NoneTerminal.ext_builtin_type_specifier_nonarray, [
4257
4338
  [
4258
4339
  EKeyword.VOID
4259
4340
  ],
@@ -6391,7 +6472,7 @@
6391
6472
  return !!this._definedMacros.get(macro.lexeme);
6392
6473
  } else {
6393
6474
  var macro1 = this._definedMacros.get(id.lexeme);
6394
- if (!macro1) {
6475
+ if (!macro1 || !macro1.body) {
6395
6476
  return false;
6396
6477
  }
6397
6478
  if (macro1.isFunction) {
@@ -7977,7 +8058,7 @@
7977
8058
  ShaderLab._shaderRangePool = ShaderLabUtils.createObjectPool(ShaderRange);
7978
8059
 
7979
8060
  //@ts-ignore
7980
- var version = "1.4.0-alpha.3";
8061
+ var version = "1.4.0-beta.0";
7981
8062
  var mode = "Release";
7982
8063
  mode = "Verbose";
7983
8064
  console.log("Galacean ShaderLab version: " + version + ". mode: " + mode);