Skip to content

Commit

Permalink
Merge pull request #34 from mohayonao/fix-unary-expression
Browse files Browse the repository at this point in the history
fix UnaryExpression
  • Loading branch information
mohayonao committed May 13, 2014
2 parents b26a226 + 92c8e13 commit 1ec71dd
Show file tree
Hide file tree
Showing 5 changed files with 82 additions and 15 deletions.
22 changes: 16 additions & 6 deletions build/scscript.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
(function(global) {
"use strict";

var sc = { VERSION: "0.0.24" };
var sc = { VERSION: "0.0.25" };

// src/sc/sc.js
(function(sc) {
Expand Down Expand Up @@ -2547,20 +2547,30 @@ var sc = { VERSION: "0.0.24" };

// 4.6 Unary Expressions
SCParser.prototype.parseUnaryExpression = function(node) {
var token, expr;
var token, expr, method;
var marker;

marker = Marker.create(this.lexer);

if (this.match("`")) {
switch (this.matchAny([ "`", "-" ])) {
case "`":
token = this.lex();
expr = this.parseUnaryExpression();
expr = this.parseLeftHandSideExpression();
expr = Node.createUnaryExpression(token.value, expr);
} else {
break;
case "-":
token = this.lex();
method = Node.createIdentifier("neg");
method = marker.update().apply(method);
expr = this.parseLeftHandSideExpression();
expr = Node.createCallExpression(expr, method, { list: [] }, ".");
break;
default:
expr = this.parseLeftHandSideExpression(node);
break;
}

return marker.update().apply(expr);
return marker.update().apply(expr, true);
};

// 4.7 LeftHandSide Expressions
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "scscript",
"version": "0.0.24",
"version": "0.0.25",
"author": "Nao Yonamine <mohayonao@gmail.com>",
"homepage": "http://mohayonao.github.io/SCScript/",
"bugs": "https://github.com/mohayonao/SCScript/issues",
Expand Down
20 changes: 15 additions & 5 deletions src/sc/lang/compiler/parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -590,20 +590,30 @@

// 4.6 Unary Expressions
SCParser.prototype.parseUnaryExpression = function(node) {
var token, expr;
var token, expr, method;
var marker;

marker = Marker.create(this.lexer);

if (this.match("`")) {
switch (this.matchAny([ "`", "-" ])) {
case "`":
token = this.lex();
expr = this.parseUnaryExpression();
expr = this.parseLeftHandSideExpression();
expr = Node.createUnaryExpression(token.value, expr);
} else {
break;
case "-":
token = this.lex();
method = Node.createIdentifier("neg");
method = marker.update().apply(method);
expr = this.parseLeftHandSideExpression();
expr = Node.createCallExpression(expr, method, { list: [] }, ".");
break;
default:
expr = this.parseLeftHandSideExpression(node);
break;
}

return marker.update().apply(expr);
return marker.update().apply(expr, true);
};

// 4.7 LeftHandSide Expressions
Expand Down
2 changes: 1 addition & 1 deletion src/sc/lang/compiler/parser_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@
error({ line: 1, column: 2, index: 1 }, Message.UnexpectedToken, "ILLEGAL"),
],
"``": [
error({ line: 1, column: 3, index: 2 }, Message.UnexpectedEOS),
error({ line: 1, column: 2, index: 1 }, Message.UnexpectedToken, "`"),
],
"[1": [
error({ line: 1, column: 3, index: 2 }, Message.UnexpectedEOS),
Expand Down
51 changes: 49 additions & 2 deletions src/sc/lang/compiler/test-cases.js
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,53 @@
}
}
},
"-a": {
compiled: [
"SCScript(function($this, $SC) {",
" return $this.a().neg();",
"});",
],
ast: {
type: Syntax.Program,
body: [
{
type: Syntax.CallExpression,
stamp: ".",
callee: {
type: Syntax.Identifier,
name: "a",
range: [ 1, 2 ],
loc: {
start: { line: 1, column: 1 },
end : { line: 1, column: 2 }
}
},
method: {
type: Syntax.Identifier,
name: "neg",
range: [ 0, 1 ],
loc: {
start: { line: 1, column: 0 },
end : { line: 1, column: 1 }
}
},
args: {
list: []
},
range: [ 0, 2 ],
loc: {
start: { line: 1, column: 0 },
end : { line: 1, column: 2 }
}
}
],
range: [ 0, 2 ],
loc: {
start: { line: 1, column: 0 },
end : { line: 1, column: 2 }
}
}
},
"nil": {
compiled: [
"SCScript(function($this, $SC) {",
Expand Down Expand Up @@ -3520,9 +3567,9 @@
type: Syntax.FunctionExpression,
body: [],
closed: true,
range: [ 5, 7 ],
range: [ 4, 7 ],
loc: {
start: { line: 1, column: 5 },
start: { line: 1, column: 4 },
end : { line: 1, column: 7 }
}
},
Expand Down

0 comments on commit 1ec71dd

Please sign in to comment.