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

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.
@@ -544,7 +544,7 @@ var ETokenType = /*#__PURE__*/ function(ETokenType) {
544
544
  /** , */ ETokenType[ETokenType["COMMA"] = 1032] = "COMMA";
545
545
  ETokenType[ETokenType["COLON"] = 1033] = "COLON";
546
546
  /** = */ ETokenType[ETokenType["EQUAL"] = 1034] = "EQUAL";
547
- ETokenType[ETokenType["SEMICOLON"] = 1035] = "SEMICOLON";
547
+ /** ; */ ETokenType[ETokenType["SEMICOLON"] = 1035] = "SEMICOLON";
548
548
  /** ! */ ETokenType[ETokenType["BANG"] = 1036] = "BANG";
549
549
  /** \- */ ETokenType[ETokenType["DASH"] = 1037] = "DASH";
550
550
  /** ~ */ ETokenType[ETokenType["TILDE"] = 1038] = "TILDE";
@@ -761,7 +761,8 @@ var LexerUtils = /*#__PURE__*/ function() {
761
761
  };
762
762
  LexerUtils.isSpace = function isSpace(charCode) {
763
763
  return charCode === 9 || // Tab
764
- charCode === 10 || // Line break
764
+ charCode === 10 || // Line break - /n
765
+ charCode === 13 || // Carriage return -/r
765
766
  charCode === 32 // Space
766
767
  ;
767
768
  };
@@ -837,7 +838,11 @@ var BaseScanner = /*#__PURE__*/ function() {
837
838
  var start = this.getCurPosition();
838
839
  this.advance(2);
839
840
  // single line comments
840
- while(this.getCurChar() !== "\n")this._advance();
841
+ var curChar = this.getCurChar();
842
+ while(curChar !== "\n" && curChar !== "\r" && !this.isEnd()){
843
+ this._advance();
844
+ curChar = this.getCurChar();
845
+ }
841
846
  this.skipCommentsAndSpace();
842
847
  return ShaderLab.createRange(start, this.getCurPosition());
843
848
  } else if (this.peek(2) === "/*") {
@@ -960,7 +965,8 @@ var BaseScanner = /*#__PURE__*/ function() {
960
965
  BaseScanner._spaceCharsWithBreak = [
961
966
  " ",
962
967
  "\t",
963
- "\n"
968
+ "\n",
969
+ "\r"
964
970
  ];
965
971
  BaseScanner._spaceChars = [
966
972
  " ",
@@ -1555,101 +1561,103 @@ var NoneTerminal = /*#__PURE__*/ function(NoneTerminal) {
1555
1561
  // glsl
1556
1562
  NoneTerminal[NoneTerminal["global_declaration"] = 2002] = "global_declaration";
1557
1563
  NoneTerminal[NoneTerminal["variable_declaration"] = 2003] = "variable_declaration";
1558
- NoneTerminal[NoneTerminal["array_specifier_list"] = 2004] = "array_specifier_list";
1559
- NoneTerminal[NoneTerminal["array_specifier"] = 2005] = "array_specifier";
1560
- NoneTerminal[NoneTerminal["ext_builtin_type_specifier_nonarray"] = 2006] = "ext_builtin_type_specifier_nonarray";
1561
- NoneTerminal[NoneTerminal["precision_specifier"] = 2007] = "precision_specifier";
1562
- NoneTerminal[NoneTerminal["variable_identifier"] = 2008] = "variable_identifier";
1563
- NoneTerminal[NoneTerminal["variable_identifier_node"] = 2009] = "variable_identifier_node";
1564
- NoneTerminal[NoneTerminal["primary_expression"] = 2010] = "primary_expression";
1565
- NoneTerminal[NoneTerminal["postfix_expression"] = 2011] = "postfix_expression";
1566
- NoneTerminal[NoneTerminal["integer_expression"] = 2012] = "integer_expression";
1567
- NoneTerminal[NoneTerminal["function_call"] = 2013] = "function_call";
1568
- NoneTerminal[NoneTerminal["function_call_generic"] = 2014] = "function_call_generic";
1569
- NoneTerminal[NoneTerminal["function_call_header_no_parameters"] = 2015] = "function_call_header_no_parameters";
1570
- NoneTerminal[NoneTerminal["function_call_header_with_parameters"] = 2016] = "function_call_header_with_parameters";
1571
- NoneTerminal[NoneTerminal["function_call_parameter_list"] = 2017] = "function_call_parameter_list";
1572
- NoneTerminal[NoneTerminal["function_call_header"] = 2018] = "function_call_header";
1573
- NoneTerminal[NoneTerminal["function_identifier"] = 2019] = "function_identifier";
1574
- NoneTerminal[NoneTerminal["constructor_identifier"] = 2020] = "constructor_identifier";
1575
- NoneTerminal[NoneTerminal["unary_expression"] = 2021] = "unary_expression";
1576
- NoneTerminal[NoneTerminal["unary_operator"] = 2022] = "unary_operator";
1577
- NoneTerminal[NoneTerminal["multiplicative_expression"] = 2023] = "multiplicative_expression";
1578
- NoneTerminal[NoneTerminal["additive_expression"] = 2024] = "additive_expression";
1579
- NoneTerminal[NoneTerminal["shift_expression"] = 2025] = "shift_expression";
1580
- NoneTerminal[NoneTerminal["relational_expression"] = 2026] = "relational_expression";
1581
- NoneTerminal[NoneTerminal["equality_expression"] = 2027] = "equality_expression";
1582
- NoneTerminal[NoneTerminal["and_expression"] = 2028] = "and_expression";
1583
- NoneTerminal[NoneTerminal["inclusive_or_expression"] = 2029] = "inclusive_or_expression";
1584
- NoneTerminal[NoneTerminal["exclusive_or_expression"] = 2030] = "exclusive_or_expression";
1585
- NoneTerminal[NoneTerminal["logical_and_expression"] = 2031] = "logical_and_expression";
1586
- NoneTerminal[NoneTerminal["logical_xor_expression"] = 2032] = "logical_xor_expression";
1587
- NoneTerminal[NoneTerminal["logical_or_expression"] = 2033] = "logical_or_expression";
1588
- NoneTerminal[NoneTerminal["conditional_expression"] = 2034] = "conditional_expression";
1589
- NoneTerminal[NoneTerminal["assignment_expression"] = 2035] = "assignment_expression";
1590
- NoneTerminal[NoneTerminal["assignment_operator"] = 2036] = "assignment_operator";
1591
- NoneTerminal[NoneTerminal["expression"] = 2037] = "expression";
1592
- NoneTerminal[NoneTerminal["integer_constant_expression"] = 2038] = "integer_constant_expression";
1593
- NoneTerminal[NoneTerminal["integer_constant_expression_operator"] = 2039] = "integer_constant_expression_operator";
1594
- NoneTerminal[NoneTerminal["declaration"] = 2040] = "declaration";
1595
- NoneTerminal[NoneTerminal["function_prototype"] = 2041] = "function_prototype";
1596
- NoneTerminal[NoneTerminal["function_declarator"] = 2042] = "function_declarator";
1597
- NoneTerminal[NoneTerminal["function_header_with_parameters"] = 2043] = "function_header_with_parameters";
1598
- NoneTerminal[NoneTerminal["function_header"] = 2044] = "function_header";
1599
- NoneTerminal[NoneTerminal["function_parameter_list"] = 2045] = "function_parameter_list";
1600
- NoneTerminal[NoneTerminal["parameter_declarator"] = 2046] = "parameter_declarator";
1601
- NoneTerminal[NoneTerminal["parameter_declaration"] = 2047] = "parameter_declaration";
1602
- NoneTerminal[NoneTerminal["parameter_qualifier"] = 2048] = "parameter_qualifier";
1603
- NoneTerminal[NoneTerminal["parameter_type_specifier"] = 2049] = "parameter_type_specifier";
1604
- NoneTerminal[NoneTerminal["init_declarator_list"] = 2050] = "init_declarator_list";
1605
- NoneTerminal[NoneTerminal["single_declaration"] = 2051] = "single_declaration";
1606
- NoneTerminal[NoneTerminal["fully_specified_type"] = 2052] = "fully_specified_type";
1607
- NoneTerminal[NoneTerminal["type_qualifier"] = 2053] = "type_qualifier";
1608
- NoneTerminal[NoneTerminal["single_type_qualifier"] = 2054] = "single_type_qualifier";
1609
- NoneTerminal[NoneTerminal["storage_qualifier"] = 2055] = "storage_qualifier";
1610
- NoneTerminal[NoneTerminal["precision_qualifier"] = 2056] = "precision_qualifier";
1611
- NoneTerminal[NoneTerminal["interpolation_qualifier"] = 2057] = "interpolation_qualifier";
1612
- NoneTerminal[NoneTerminal["invariant_qualifier"] = 2058] = "invariant_qualifier";
1613
- NoneTerminal[NoneTerminal["type_specifier"] = 2059] = "type_specifier";
1614
- NoneTerminal[NoneTerminal["type_specifier_nonarray"] = 2060] = "type_specifier_nonarray";
1615
- NoneTerminal[NoneTerminal["type_specifier_no_prec"] = 2061] = "type_specifier_no_prec";
1616
- NoneTerminal[NoneTerminal["basic_type"] = 2062] = "basic_type";
1617
- NoneTerminal[NoneTerminal["struct_specifier"] = 2063] = "struct_specifier";
1618
- NoneTerminal[NoneTerminal["struct_declaration_list"] = 2064] = "struct_declaration_list";
1619
- NoneTerminal[NoneTerminal["struct_declaration"] = 2065] = "struct_declaration";
1620
- NoneTerminal[NoneTerminal["layout_qualifier"] = 2066] = "layout_qualifier";
1621
- NoneTerminal[NoneTerminal["struct_declarator_list"] = 2067] = "struct_declarator_list";
1622
- NoneTerminal[NoneTerminal["struct_declarator"] = 2068] = "struct_declarator";
1623
- NoneTerminal[NoneTerminal["identifier_list"] = 2069] = "identifier_list";
1624
- NoneTerminal[NoneTerminal["decl_identifier"] = 2070] = "decl_identifier";
1625
- NoneTerminal[NoneTerminal["initializer"] = 2071] = "initializer";
1626
- NoneTerminal[NoneTerminal["initializer_list"] = 2072] = "initializer_list";
1627
- NoneTerminal[NoneTerminal["declaration_statement"] = 2073] = "declaration_statement";
1628
- NoneTerminal[NoneTerminal["simple_statement"] = 2074] = "simple_statement";
1629
- NoneTerminal[NoneTerminal["compound_statement_no_scope"] = 2075] = "compound_statement_no_scope";
1630
- NoneTerminal[NoneTerminal["statement_with_scope"] = 2076] = "statement_with_scope";
1631
- NoneTerminal[NoneTerminal["compound_statement"] = 2077] = "compound_statement";
1632
- NoneTerminal[NoneTerminal["statement"] = 2078] = "statement";
1633
- NoneTerminal[NoneTerminal["statement_list"] = 2079] = "statement_list";
1634
- NoneTerminal[NoneTerminal["iteration_statement_no_new_scope"] = 2080] = "iteration_statement_no_new_scope";
1635
- NoneTerminal[NoneTerminal["expression_statement"] = 2081] = "expression_statement";
1636
- NoneTerminal[NoneTerminal["selection_statement"] = 2082] = "selection_statement";
1637
- NoneTerminal[NoneTerminal["selection_rest_statement"] = 2083] = "selection_rest_statement";
1638
- NoneTerminal[NoneTerminal["condition"] = 2084] = "condition";
1639
- NoneTerminal[NoneTerminal["conditionopt"] = 2085] = "conditionopt";
1640
- NoneTerminal[NoneTerminal["iteration_statement"] = 2086] = "iteration_statement";
1641
- NoneTerminal[NoneTerminal["for_init_statement"] = 2087] = "for_init_statement";
1642
- NoneTerminal[NoneTerminal["for_rest_statement"] = 2088] = "for_rest_statement";
1643
- NoneTerminal[NoneTerminal["jump_statement"] = 2089] = "jump_statement";
1644
- NoneTerminal[NoneTerminal["external_declaration"] = 2090] = "external_declaration";
1645
- NoneTerminal[NoneTerminal["function_definition"] = 2091] = "function_definition";
1646
- NoneTerminal[NoneTerminal["field_selection"] = 2092] = "field_selection";
1647
- NoneTerminal[NoneTerminal["bool_constant"] = 2093] = "bool_constant";
1648
- NoneTerminal[NoneTerminal["function_identifier_node"] = 2094] = "function_identifier_node";
1649
- NoneTerminal[NoneTerminal["typename_identifier_node"] = 2095] = "typename_identifier_node";
1650
- NoneTerminal[NoneTerminal["scope_brace"] = 2096] = "scope_brace";
1651
- NoneTerminal[NoneTerminal["scope_end_brace"] = 2097] = "scope_end_brace";
1652
- NoneTerminal[NoneTerminal["_ignore"] = 2098] = "_ignore";
1564
+ NoneTerminal[NoneTerminal["variable_declaration_list"] = 2004] = "variable_declaration_list";
1565
+ NoneTerminal[NoneTerminal["variable_declaration_statement"] = 2005] = "variable_declaration_statement";
1566
+ NoneTerminal[NoneTerminal["array_specifier_list"] = 2006] = "array_specifier_list";
1567
+ NoneTerminal[NoneTerminal["array_specifier"] = 2007] = "array_specifier";
1568
+ NoneTerminal[NoneTerminal["ext_builtin_type_specifier_nonarray"] = 2008] = "ext_builtin_type_specifier_nonarray";
1569
+ NoneTerminal[NoneTerminal["precision_specifier"] = 2009] = "precision_specifier";
1570
+ NoneTerminal[NoneTerminal["variable_identifier"] = 2010] = "variable_identifier";
1571
+ NoneTerminal[NoneTerminal["variable_identifier_node"] = 2011] = "variable_identifier_node";
1572
+ NoneTerminal[NoneTerminal["primary_expression"] = 2012] = "primary_expression";
1573
+ NoneTerminal[NoneTerminal["postfix_expression"] = 2013] = "postfix_expression";
1574
+ NoneTerminal[NoneTerminal["integer_expression"] = 2014] = "integer_expression";
1575
+ NoneTerminal[NoneTerminal["function_call"] = 2015] = "function_call";
1576
+ NoneTerminal[NoneTerminal["function_call_generic"] = 2016] = "function_call_generic";
1577
+ NoneTerminal[NoneTerminal["function_call_header_no_parameters"] = 2017] = "function_call_header_no_parameters";
1578
+ NoneTerminal[NoneTerminal["function_call_header_with_parameters"] = 2018] = "function_call_header_with_parameters";
1579
+ NoneTerminal[NoneTerminal["function_call_parameter_list"] = 2019] = "function_call_parameter_list";
1580
+ NoneTerminal[NoneTerminal["function_call_header"] = 2020] = "function_call_header";
1581
+ NoneTerminal[NoneTerminal["function_identifier"] = 2021] = "function_identifier";
1582
+ NoneTerminal[NoneTerminal["constructor_identifier"] = 2022] = "constructor_identifier";
1583
+ NoneTerminal[NoneTerminal["unary_expression"] = 2023] = "unary_expression";
1584
+ NoneTerminal[NoneTerminal["unary_operator"] = 2024] = "unary_operator";
1585
+ NoneTerminal[NoneTerminal["multiplicative_expression"] = 2025] = "multiplicative_expression";
1586
+ NoneTerminal[NoneTerminal["additive_expression"] = 2026] = "additive_expression";
1587
+ NoneTerminal[NoneTerminal["shift_expression"] = 2027] = "shift_expression";
1588
+ NoneTerminal[NoneTerminal["relational_expression"] = 2028] = "relational_expression";
1589
+ NoneTerminal[NoneTerminal["equality_expression"] = 2029] = "equality_expression";
1590
+ NoneTerminal[NoneTerminal["and_expression"] = 2030] = "and_expression";
1591
+ NoneTerminal[NoneTerminal["inclusive_or_expression"] = 2031] = "inclusive_or_expression";
1592
+ NoneTerminal[NoneTerminal["exclusive_or_expression"] = 2032] = "exclusive_or_expression";
1593
+ NoneTerminal[NoneTerminal["logical_and_expression"] = 2033] = "logical_and_expression";
1594
+ NoneTerminal[NoneTerminal["logical_xor_expression"] = 2034] = "logical_xor_expression";
1595
+ NoneTerminal[NoneTerminal["logical_or_expression"] = 2035] = "logical_or_expression";
1596
+ NoneTerminal[NoneTerminal["conditional_expression"] = 2036] = "conditional_expression";
1597
+ NoneTerminal[NoneTerminal["assignment_expression"] = 2037] = "assignment_expression";
1598
+ NoneTerminal[NoneTerminal["assignment_operator"] = 2038] = "assignment_operator";
1599
+ NoneTerminal[NoneTerminal["expression"] = 2039] = "expression";
1600
+ NoneTerminal[NoneTerminal["integer_constant_expression"] = 2040] = "integer_constant_expression";
1601
+ NoneTerminal[NoneTerminal["integer_constant_expression_operator"] = 2041] = "integer_constant_expression_operator";
1602
+ NoneTerminal[NoneTerminal["declaration"] = 2042] = "declaration";
1603
+ NoneTerminal[NoneTerminal["function_prototype"] = 2043] = "function_prototype";
1604
+ NoneTerminal[NoneTerminal["function_declarator"] = 2044] = "function_declarator";
1605
+ NoneTerminal[NoneTerminal["function_header_with_parameters"] = 2045] = "function_header_with_parameters";
1606
+ NoneTerminal[NoneTerminal["function_header"] = 2046] = "function_header";
1607
+ NoneTerminal[NoneTerminal["function_parameter_list"] = 2047] = "function_parameter_list";
1608
+ NoneTerminal[NoneTerminal["parameter_declarator"] = 2048] = "parameter_declarator";
1609
+ NoneTerminal[NoneTerminal["parameter_declaration"] = 2049] = "parameter_declaration";
1610
+ NoneTerminal[NoneTerminal["parameter_qualifier"] = 2050] = "parameter_qualifier";
1611
+ NoneTerminal[NoneTerminal["parameter_type_specifier"] = 2051] = "parameter_type_specifier";
1612
+ NoneTerminal[NoneTerminal["init_declarator_list"] = 2052] = "init_declarator_list";
1613
+ NoneTerminal[NoneTerminal["single_declaration"] = 2053] = "single_declaration";
1614
+ NoneTerminal[NoneTerminal["fully_specified_type"] = 2054] = "fully_specified_type";
1615
+ NoneTerminal[NoneTerminal["type_qualifier"] = 2055] = "type_qualifier";
1616
+ NoneTerminal[NoneTerminal["single_type_qualifier"] = 2056] = "single_type_qualifier";
1617
+ NoneTerminal[NoneTerminal["storage_qualifier"] = 2057] = "storage_qualifier";
1618
+ NoneTerminal[NoneTerminal["precision_qualifier"] = 2058] = "precision_qualifier";
1619
+ NoneTerminal[NoneTerminal["interpolation_qualifier"] = 2059] = "interpolation_qualifier";
1620
+ NoneTerminal[NoneTerminal["invariant_qualifier"] = 2060] = "invariant_qualifier";
1621
+ NoneTerminal[NoneTerminal["type_specifier"] = 2061] = "type_specifier";
1622
+ NoneTerminal[NoneTerminal["type_specifier_nonarray"] = 2062] = "type_specifier_nonarray";
1623
+ NoneTerminal[NoneTerminal["type_specifier_no_prec"] = 2063] = "type_specifier_no_prec";
1624
+ NoneTerminal[NoneTerminal["basic_type"] = 2064] = "basic_type";
1625
+ NoneTerminal[NoneTerminal["struct_specifier"] = 2065] = "struct_specifier";
1626
+ NoneTerminal[NoneTerminal["struct_declaration_list"] = 2066] = "struct_declaration_list";
1627
+ NoneTerminal[NoneTerminal["struct_declaration"] = 2067] = "struct_declaration";
1628
+ NoneTerminal[NoneTerminal["layout_qualifier"] = 2068] = "layout_qualifier";
1629
+ NoneTerminal[NoneTerminal["struct_declarator_list"] = 2069] = "struct_declarator_list";
1630
+ NoneTerminal[NoneTerminal["struct_declarator"] = 2070] = "struct_declarator";
1631
+ NoneTerminal[NoneTerminal["identifier_list"] = 2071] = "identifier_list";
1632
+ NoneTerminal[NoneTerminal["decl_identifier"] = 2072] = "decl_identifier";
1633
+ NoneTerminal[NoneTerminal["initializer"] = 2073] = "initializer";
1634
+ NoneTerminal[NoneTerminal["initializer_list"] = 2074] = "initializer_list";
1635
+ NoneTerminal[NoneTerminal["declaration_statement"] = 2075] = "declaration_statement";
1636
+ NoneTerminal[NoneTerminal["simple_statement"] = 2076] = "simple_statement";
1637
+ NoneTerminal[NoneTerminal["compound_statement_no_scope"] = 2077] = "compound_statement_no_scope";
1638
+ NoneTerminal[NoneTerminal["statement_with_scope"] = 2078] = "statement_with_scope";
1639
+ NoneTerminal[NoneTerminal["compound_statement"] = 2079] = "compound_statement";
1640
+ NoneTerminal[NoneTerminal["statement"] = 2080] = "statement";
1641
+ NoneTerminal[NoneTerminal["statement_list"] = 2081] = "statement_list";
1642
+ NoneTerminal[NoneTerminal["iteration_statement_no_new_scope"] = 2082] = "iteration_statement_no_new_scope";
1643
+ NoneTerminal[NoneTerminal["expression_statement"] = 2083] = "expression_statement";
1644
+ NoneTerminal[NoneTerminal["selection_statement"] = 2084] = "selection_statement";
1645
+ NoneTerminal[NoneTerminal["selection_rest_statement"] = 2085] = "selection_rest_statement";
1646
+ NoneTerminal[NoneTerminal["condition"] = 2086] = "condition";
1647
+ NoneTerminal[NoneTerminal["conditionopt"] = 2087] = "conditionopt";
1648
+ NoneTerminal[NoneTerminal["iteration_statement"] = 2088] = "iteration_statement";
1649
+ NoneTerminal[NoneTerminal["for_init_statement"] = 2089] = "for_init_statement";
1650
+ NoneTerminal[NoneTerminal["for_rest_statement"] = 2090] = "for_rest_statement";
1651
+ NoneTerminal[NoneTerminal["jump_statement"] = 2091] = "jump_statement";
1652
+ NoneTerminal[NoneTerminal["external_declaration"] = 2092] = "external_declaration";
1653
+ NoneTerminal[NoneTerminal["function_definition"] = 2093] = "function_definition";
1654
+ NoneTerminal[NoneTerminal["field_selection"] = 2094] = "field_selection";
1655
+ NoneTerminal[NoneTerminal["bool_constant"] = 2095] = "bool_constant";
1656
+ NoneTerminal[NoneTerminal["function_identifier_node"] = 2096] = "function_identifier_node";
1657
+ NoneTerminal[NoneTerminal["typename_identifier_node"] = 2097] = "typename_identifier_node";
1658
+ NoneTerminal[NoneTerminal["scope_brace"] = 2098] = "scope_brace";
1659
+ NoneTerminal[NoneTerminal["scope_end_brace"] = 2099] = "scope_end_brace";
1660
+ NoneTerminal[NoneTerminal["_ignore"] = 2100] = "_ignore";
1653
1661
  return NoneTerminal;
1654
1662
  }({});
1655
1663
 
@@ -1746,38 +1754,43 @@ var BuiltinFunction = /*#__PURE__*/ function() {
1746
1754
  list.push(fn);
1747
1755
  BuiltinFunctionTable.set(ident, list);
1748
1756
  };
1749
- BuiltinFunction.getFn = function getFn(ident) {
1750
- for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){
1751
- args[_key - 1] = arguments[_key];
1752
- }
1757
+ BuiltinFunction.getFn = function getFn(ident, parameterTypes) {
1753
1758
  var list = BuiltinFunctionTable.get(ident);
1754
- var realType = TypeAny;
1755
- if (list == null ? void 0 : list.length) {
1756
- var fun = list.find(function(item) {
1757
- if (item.args.length !== args.length) return false;
1758
- var genType = 0;
1759
- for(var i = 0; i < args.length; i++){
1760
- if (args[i] === TypeAny) continue;
1761
- realType = args[i];
1762
- if (isGenericType(item.args[i])) {
1763
- if (genType === 0) {
1764
- genType = args[i];
1765
- continue;
1766
- } else {
1767
- realType = genType;
1759
+ if (list) {
1760
+ for(var length = list.length, i = 0; i < length; i++){
1761
+ var fn = list[i];
1762
+ var fnArgs = fn.args;
1763
+ var argLength = fnArgs.length;
1764
+ if (argLength !== parameterTypes.length) continue;
1765
+ // Try to match generic parameter type.
1766
+ var returnType = TypeAny;
1767
+ var found = true;
1768
+ for(var i1 = 0; i1 < argLength; i1++){
1769
+ var curFnArg = fnArgs[i1];
1770
+ if (isGenericType(curFnArg)) {
1771
+ if (returnType === TypeAny) returnType = parameterTypes[i1];
1772
+ } else {
1773
+ if (curFnArg !== parameterTypes[i1] && parameterTypes[i1] !== TypeAny) {
1774
+ found = false;
1775
+ break;
1768
1776
  }
1769
1777
  }
1770
- if (args[i] === TypeAny) continue;
1771
- if (args[i] !== realType) return false;
1772
1778
  }
1773
- return true;
1774
- });
1775
- if (fun) return {
1776
- fun: fun,
1777
- genType: realType
1778
- };
1779
+ if (found) {
1780
+ fn._realReturnType = returnType;
1781
+ return fn;
1782
+ }
1783
+ }
1779
1784
  }
1780
1785
  };
1786
+ _create_class(BuiltinFunction, [
1787
+ {
1788
+ key: "realReturnType",
1789
+ get: function get() {
1790
+ return this._realReturnType;
1791
+ }
1792
+ }
1793
+ ]);
1781
1794
  return BuiltinFunction;
1782
1795
  }();
1783
1796
  BuiltinFunction._create("radians", 200, 200);
@@ -1912,8 +1925,8 @@ BuiltinFunction._create("textureSize", EKeyword.IVEC2, EKeyword.SAMPLER2D_SHADOW
1912
1925
  BuiltinFunction._create("textureSize", EKeyword.IVEC2, EKeyword.SAMPLER_CUBE_SHADOW, EKeyword.INT);
1913
1926
  BuiltinFunction._create("textureSize", EKeyword.IVEC3, 213, EKeyword.INT);
1914
1927
  BuiltinFunction._create("textureSize", EKeyword.IVEC3, EKeyword.SAMPLER2D_ARRAY_SHADOW, EKeyword.INT);
1915
- BuiltinFunction._create("texture2D", EKeyword.SAMPLER2D, EKeyword.VEC2);
1916
- BuiltinFunction._create("texture2D", EKeyword.SAMPLER2D, EKeyword.VEC2, EKeyword.FLOAT);
1928
+ BuiltinFunction._create("texture2D", EKeyword.VEC4, EKeyword.SAMPLER2D, EKeyword.VEC2);
1929
+ BuiltinFunction._create("texture2D", EKeyword.VEC4, EKeyword.SAMPLER2D, EKeyword.VEC2, EKeyword.FLOAT);
1917
1930
  BuiltinFunction._create("texture", 209, 210, EKeyword.VEC2, EKeyword.FLOAT);
1918
1931
  BuiltinFunction._create("texture", 209, 210, EKeyword.VEC2);
1919
1932
  BuiltinFunction._create("texture", 209, 211, EKeyword.VEC3, EKeyword.FLOAT);
@@ -1940,9 +1953,12 @@ BuiltinFunction._create("textureLod", 209, 211, EKeyword.VEC3, EKeyword.FLOAT);
1940
1953
  BuiltinFunction._create("textureLod", 209, 212, EKeyword.VEC3, EKeyword.FLOAT);
1941
1954
  BuiltinFunction._create("textureLod", EKeyword.FLOAT, EKeyword.SAMPLER2D_SHADOW, EKeyword.VEC3, EKeyword.FLOAT);
1942
1955
  BuiltinFunction._create("textureLod", 209, 213, EKeyword.VEC3, EKeyword.FLOAT);
1956
+ BuiltinFunction._create("texture2DLodEXT", 209, 210, EKeyword.VEC2, EKeyword.FLOAT);
1957
+ BuiltinFunction._create("texture2DLodEXT", 209, 211, EKeyword.VEC3, EKeyword.FLOAT);
1943
1958
  BuiltinFunction._create("textureCube", EKeyword.SAMPLER_CUBE, EKeyword.VEC3);
1944
1959
  BuiltinFunction._create("textureCube", EKeyword.SAMPLER_CUBE, EKeyword.VEC3, EKeyword.FLOAT);
1945
1960
  BuiltinFunction._create("textureCubeLod", EKeyword.SAMPLER_CUBE, EKeyword.VEC3, EKeyword.FLOAT);
1961
+ BuiltinFunction._create("textureCubeLodEXT", 209, 212, EKeyword.VEC3, EKeyword.FLOAT);
1946
1962
  BuiltinFunction._create("textureOffset", 209, 210, EKeyword.VEC2, EKeyword.IVEC2, EKeyword.FLOAT);
1947
1963
  BuiltinFunction._create("textureOffset", 209, 210, EKeyword.VEC2, EKeyword.IVEC2);
1948
1964
  BuiltinFunction._create("textureOffset", 209, 211, EKeyword.VEC3, EKeyword.IVEC3, EKeyword.FLOAT);
@@ -2276,7 +2292,9 @@ var TreeNode = /*#__PURE__*/ function() {
2276
2292
  _proto.codeGen = function codeGen(visitor) {
2277
2293
  return visitor.defaultCodeGen(this.children);
2278
2294
  };
2279
- _proto.semanticAnalyze = function semanticAnalyze(sa) {};
2295
+ /**
2296
+ * Do semantic analyze right after the ast node is generated.
2297
+ */ _proto.semanticAnalyze = function semanticAnalyze(sa) {};
2280
2298
  _create_class(TreeNode, [
2281
2299
  {
2282
2300
  key: "children",
@@ -2519,19 +2537,26 @@ var TreeNode = /*#__PURE__*/ function() {
2519
2537
  this.arraySpecifier = undefined;
2520
2538
  };
2521
2539
  _proto.semanticAnalyze = function semanticAnalyze(sa) {
2522
- var fullyType = this.children[0];
2523
- var id = this.children[1];
2524
- this.typeSpecifier = fullyType.typeSpecifier;
2540
+ var children = this.children;
2541
+ var childrenLen = children.length;
2542
+ var fullyType = children[0];
2543
+ var typeSpecifier = fullyType.typeSpecifier;
2544
+ this.typeSpecifier = typeSpecifier;
2545
+ this.arraySpecifier = typeSpecifier.arraySpecifier;
2546
+ var id = children[1];
2525
2547
  var sm;
2526
- if (this.children.length === 2 || this.children.length === 4) {
2527
- var symbolType = new SymbolType(fullyType.type, fullyType.typeSpecifier.lexeme);
2528
- var initializer = this.children[3];
2548
+ if (childrenLen === 2 || childrenLen === 4) {
2549
+ var symbolType = new SymbolType(fullyType.type, typeSpecifier.lexeme, this.arraySpecifier);
2550
+ var initializer = children[3];
2529
2551
  sm = new VarSymbol(id.lexeme, symbolType, false, initializer);
2530
2552
  } else {
2531
- var arraySpecifier = this.children[2];
2553
+ var arraySpecifier = children[2];
2554
+ if (arraySpecifier && this.arraySpecifier) {
2555
+ sa.reportError(arraySpecifier.location, "Array of array is not supported.");
2556
+ }
2532
2557
  this.arraySpecifier = arraySpecifier;
2533
- var symbolType1 = new SymbolType(fullyType.type, fullyType.typeSpecifier.lexeme, arraySpecifier);
2534
- var initializer1 = this.children[4];
2558
+ var symbolType1 = new SymbolType(fullyType.type, typeSpecifier.lexeme, this.arraySpecifier);
2559
+ var initializer1 = children[4];
2535
2560
  sm = new VarSymbol(id.lexeme, symbolType1, false, initializer1);
2536
2561
  }
2537
2562
  sa.symbolTableStack.insert(sm);
@@ -2713,6 +2738,12 @@ var TreeNode = /*#__PURE__*/ function() {
2713
2738
  return (_this_children = this.children) == null ? void 0 : (_this_children_ = _this_children[1]) == null ? void 0 : _this_children_.size;
2714
2739
  }
2715
2740
  },
2741
+ {
2742
+ key: "arraySpecifier",
2743
+ get: function get() {
2744
+ return this.children[1];
2745
+ }
2746
+ },
2716
2747
  {
2717
2748
  key: "isCustom",
2718
2749
  get: function get() {
@@ -3372,7 +3403,6 @@ var TreeNode = /*#__PURE__*/ function() {
3372
3403
  if (functionIdentifier.isBuiltin) {
3373
3404
  this.type = functionIdentifier.ident;
3374
3405
  } else {
3375
- var _BuiltinFunction;
3376
3406
  var _fnSymbol_dataType;
3377
3407
  var fnIdent = functionIdentifier.ident;
3378
3408
  var paramSig;
@@ -3382,11 +3412,9 @@ var TreeNode = /*#__PURE__*/ function() {
3382
3412
  paramSig = paramList.paramSig;
3383
3413
  }
3384
3414
  }
3385
- var builtinFn = (_BuiltinFunction = BuiltinFunction).getFn.apply(_BuiltinFunction, [].concat([
3386
- fnIdent
3387
- ], paramSig != null ? paramSig : []));
3415
+ var builtinFn = BuiltinFunction.getFn(fnIdent, paramSig);
3388
3416
  if (builtinFn) {
3389
- this.type = BuiltinFunction.getReturnType(builtinFn.fun, builtinFn.genType);
3417
+ this.type = builtinFn.realReturnType;
3390
3418
  return;
3391
3419
  }
3392
3420
  var fnSymbol = sa.lookupSymbolBy(fnIdent, ESymbolType.FN, paramSig);
@@ -4071,14 +4099,15 @@ var TreeNode = /*#__PURE__*/ function() {
4071
4099
  }
4072
4100
  var _proto = VariableDeclaration.prototype;
4073
4101
  _proto.semanticAnalyze = function semanticAnalyze(sa) {
4074
- var type = this.children[0];
4075
- var ident = this.children[1];
4076
- var sm;
4077
- sm = new VarSymbol(ident.lexeme, new SymbolType(type.type, type.typeSpecifier.lexeme), true, this);
4102
+ var children = this.children;
4103
+ var type = children[0];
4104
+ var ident = children[1];
4105
+ this.type = type;
4106
+ var sm = new VarSymbol(ident.lexeme, new SymbolType(type.type, type.typeSpecifier.lexeme), true, this);
4078
4107
  sa.symbolTableStack.insert(sm);
4079
4108
  };
4080
4109
  _proto.codeGen = function codeGen(visitor) {
4081
- return visitor.visitGlobalVariableDeclaration(this);
4110
+ return visitor.visitGlobalVariableDeclaration(this) + ";";
4082
4111
  };
4083
4112
  return VariableDeclaration;
4084
4113
  }(TreeNode);
@@ -4086,6 +4115,45 @@ var TreeNode = /*#__PURE__*/ function() {
4086
4115
  VariableDeclaration = __decorate([
4087
4116
  ASTNodeDecorator(NoneTerminal.variable_declaration)
4088
4117
  ], VariableDeclaration);
4118
+ var VariableDeclarationList = /*#__PURE__*/ function(TreeNode) {
4119
+ _inherits(VariableDeclarationList, TreeNode);
4120
+ function VariableDeclarationList() {
4121
+ return TreeNode.apply(this, arguments) || this;
4122
+ }
4123
+ var _proto = VariableDeclarationList.prototype;
4124
+ _proto.semanticAnalyze = function semanticAnalyze(sa) {
4125
+ var children = this.children;
4126
+ var length = children.length;
4127
+ var variableDeclaration = children[0];
4128
+ var type = variableDeclaration.type;
4129
+ this.type = type;
4130
+ if (length === 1) {
4131
+ return;
4132
+ }
4133
+ var ident = children[2];
4134
+ var newVariable = VariableDeclaration.pool.get();
4135
+ if (length === 3) {
4136
+ // variable_declaration_list ',' id
4137
+ newVariable.set(ident.location, [
4138
+ type,
4139
+ ident
4140
+ ]);
4141
+ } else {
4142
+ // variable_declaration_list ',' id array_specifier
4143
+ newVariable.set(ident.location, [
4144
+ type,
4145
+ ident,
4146
+ children[3]
4147
+ ]);
4148
+ }
4149
+ newVariable.semanticAnalyze(sa);
4150
+ };
4151
+ return VariableDeclarationList;
4152
+ }(TreeNode);
4153
+ ASTNode.VariableDeclarationList = VariableDeclarationList;
4154
+ VariableDeclarationList = __decorate([
4155
+ ASTNodeDecorator(NoneTerminal.variable_declaration_list)
4156
+ ], VariableDeclarationList);
4089
4157
  var VariableIdentifier = /*#__PURE__*/ function(TreeNode) {
4090
4158
  _inherits(VariableIdentifier, TreeNode);
4091
4159
  function VariableIdentifier() {
@@ -4224,7 +4292,7 @@ var productionAndRules = [].concat(GrammarUtils.createProductionWithOptions(None
4224
4292
  NoneTerminal.precision_specifier
4225
4293
  ],
4226
4294
  [
4227
- NoneTerminal.variable_declaration
4295
+ NoneTerminal.variable_declaration_statement
4228
4296
  ],
4229
4297
  [
4230
4298
  NoneTerminal.struct_specifier
@@ -4234,22 +4302,35 @@ var productionAndRules = [].concat(GrammarUtils.createProductionWithOptions(None
4234
4302
  ]
4235
4303
  ]), GrammarUtils.createProductionWithOptions(NoneTerminal.variable_declaration, [
4236
4304
  [
4237
- EKeyword.GS_RenderQueueType,
4238
- ETokenType.ID,
4239
- ETokenType.SEMICOLON
4305
+ NoneTerminal.fully_specified_type,
4306
+ ETokenType.ID
4240
4307
  ],
4241
4308
  [
4242
4309
  NoneTerminal.fully_specified_type,
4243
4310
  ETokenType.ID,
4244
- ETokenType.SEMICOLON
4311
+ NoneTerminal.array_specifier
4312
+ ]
4313
+ ], ASTNode.VariableDeclaration.pool), GrammarUtils.createProductionWithOptions(NoneTerminal.variable_declaration_list, [
4314
+ [
4315
+ NoneTerminal.variable_declaration
4245
4316
  ],
4246
4317
  [
4247
- NoneTerminal.fully_specified_type,
4318
+ NoneTerminal.variable_declaration_list,
4319
+ ETokenType.COMMA,
4320
+ ETokenType.ID
4321
+ ],
4322
+ [
4323
+ NoneTerminal.variable_declaration_list,
4324
+ ETokenType.COMMA,
4248
4325
  ETokenType.ID,
4249
- NoneTerminal.array_specifier,
4326
+ NoneTerminal.array_specifier
4327
+ ]
4328
+ ], ASTNode.VariableDeclarationList.pool), GrammarUtils.createProductionWithOptions(NoneTerminal.variable_declaration_statement, [
4329
+ [
4330
+ NoneTerminal.variable_declaration_list,
4250
4331
  ETokenType.SEMICOLON
4251
4332
  ]
4252
- ], ASTNode.VariableDeclaration.pool), GrammarUtils.createProductionWithOptions(NoneTerminal.ext_builtin_type_specifier_nonarray, [
4333
+ ]), GrammarUtils.createProductionWithOptions(NoneTerminal.ext_builtin_type_specifier_nonarray, [
4253
4334
  [
4254
4335
  EKeyword.VOID
4255
4336
  ],
@@ -6387,7 +6468,7 @@ var PpScanner = /*#__PURE__*/ function(BaseScanner) {
6387
6468
  return !!this._definedMacros.get(macro.lexeme);
6388
6469
  } else {
6389
6470
  var macro1 = this._definedMacros.get(id.lexeme);
6390
- if (!macro1) {
6471
+ if (!macro1 || !macro1.body) {
6391
6472
  return false;
6392
6473
  }
6393
6474
  if (macro1.isFunction) {
@@ -7973,7 +8054,7 @@ ShaderLab._shaderPositionPool = ShaderLabUtils.createObjectPool(ShaderPosition);
7973
8054
  ShaderLab._shaderRangePool = ShaderLabUtils.createObjectPool(ShaderRange);
7974
8055
 
7975
8056
  //@ts-ignore
7976
- var version = "1.4.0-alpha.3";
8057
+ var version = "1.4.0-beta.1";
7977
8058
  var mode = "Release";
7978
8059
  mode = "Verbose";
7979
8060
  console.log("Galacean ShaderLab version: " + version + ". mode: " + mode);