X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Flibs%2Fjsminplus.php;h=0eab8608a42f931d81d277b51120856e0b5443ea;hp=08e9d690db26c9fe255ddd2969c5ebaaa00bcc03;hb=e390198c4e4be7632b01173e42050061f1cc346a;hpb=695d7c28fe7036e9988ce92908185ebc41238296 diff --git a/includes/libs/jsminplus.php b/includes/libs/jsminplus.php index 08e9d690db..0eab8608a4 100644 --- a/includes/libs/jsminplus.php +++ b/includes/libs/jsminplus.php @@ -1292,7 +1292,10 @@ class JSParser if ($tt == OP_DOT) { - $this->t->mustMatch(TOKEN_IDENTIFIER); + $tt = $this->t->get(); + if (!$this->isKeyword($tt) && $tt !== TOKEN_IDENTIFIER) + throw $this->t->newSyntaxError("Unexpected token; token identifier or keyword expected."); + array_push($operands, new JSNode($this->t, OP_DOT, array_pop($operands), new JSNode($this->t))); } else @@ -1427,6 +1430,11 @@ class JSParser } else { + // Accept keywords as property names by treating + // them similarly with identifiers + if ($this->isKeyword($tt)) + $tt = TOKEN_IDENTIFIER; + switch ($tt) { case TOKEN_IDENTIFIER: @@ -1618,6 +1626,46 @@ class JSParser return $n; } + + private function isKeyword($tt) + { + switch ($tt) { + case KEYWORD_BREAK: + case KEYWORD_CASE: + case KEYWORD_CATCH: + case KEYWORD_CONST: + case KEYWORD_CONTINUE: + case KEYWORD_DEBUGGER: + case KEYWORD_DEFAULT: + case KEYWORD_DELETE: + case KEYWORD_DO: + case KEYWORD_ELSE: + case KEYWORD_ENUM: + case KEYWORD_FALSE: + case KEYWORD_FINALLY: + case KEYWORD_FOR: + case KEYWORD_FUNCTION: + case KEYWORD_IF: + case KEYWORD_IN: + case KEYWORD_INSTANCEOF: + case KEYWORD_NEW: + case KEYWORD_NULL: + case KEYWORD_RETURN: + case KEYWORD_SWITCH: + case KEYWORD_THIS: + case KEYWORD_THROW: + case KEYWORD_TRUE: + case KEYWORD_TRY: + case KEYWORD_TYPEOF: + case KEYWORD_VAR: + case KEYWORD_VOID: + case KEYWORD_WHILE: + case KEYWORD_WITH: + return true; + default: + return false; + } + } } class JSCompilerContext @@ -1652,7 +1700,7 @@ class JSNode public $funDecls = array(); public $varDecls = array(); - public function __construct($t, $type=0) + public function __construct($t, $type=0, ...$nodes) { if ($token = $t->currentToken()) { @@ -1668,11 +1716,9 @@ class JSNode $this->lineno = $t->lineno; } - if (($numargs = func_num_args()) > 2) + foreach($nodes as $node) { - $args = func_get_args(); - for ($i = 2; $i < $numargs; $i++) - $this->addNode($args[$i]); + $this->addNode($node); } }