Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: opal/opal
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 54a2239c0537
Choose a base ref
...
head repository: opal/opal
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 57f2a4f2e03e
Choose a head ref
  • 2 commits
  • 3 files changed
  • 1 contributor

Commits on Nov 17, 2013

  1. Copy the full SHA
    ba941ab View commit details
  2. Copy the full SHA
    57f2a4f View commit details
Showing with 36 additions and 32 deletions.
  1. +8 −8 lib/opal/parser/grammar.rb
  2. +11 −11 lib/opal/parser/grammar.y
  3. +17 −13 lib/opal/parser/lexer.rb
16 changes: 8 additions & 8 deletions lib/opal/parser/grammar.rb

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 11 additions & 11 deletions lib/opal/parser/grammar.y
Original file line number Diff line number Diff line change
@@ -7,22 +7,22 @@ token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS
kUNTIL_MOD kRESCUE_MOD kALIAS kDEFINED klBEGIN klEND k__LINE__
k__FILE__ k__ENCODING__ tIDENTIFIER tFID tGVAR tIVAR tCONSTANT
tLABEL tCVAR tNTH_REF tBACK_REF tSTRING_CONTENT tINTEGER tFLOAT
tREGEXP_END '+@' '-@' '-@NUM' tPOW tCMP tEQ tEQQ tNEQ tGEQ tLEQ tANDOP
tREGEXP_END tUPLUS tUMINUS '-@NUM' tPOW tCMP tEQ tEQQ tNEQ tGEQ tLEQ tANDOP
tOROP tMATCH tNMATCH tDOT tDOT2 tDOT3 tAREF tASET tLSHFT tRSHFT
tCOLON2 tCOLON3 tOP_ASGN tASSOC tLPAREN tLPAREN2 tRPAREN tLPAREN_ARG
ARRAY_BEG tRBRACK tLBRACE tLBRACE_ARG tSTAR tSTAR2 tAMPER tAMPER2
tTILDE tPERCENT tDIVIDE '+' '-' tLT tGT tPIPE tBANG tCARET
tTILDE tPERCENT tDIVIDE tPLUS tMINUS tLT tGT tPIPE tBANG tCARET
tLCURLY tRCURLY tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG
tWORDS_BEG tAWORDS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END tSTRING
tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA tLAMBEG
tLBRACK2 tLBRACK

prechigh
right tBANG tTILDE '+@'
right tBANG tTILDE tUPLUS
right tPOW
right '-@NUM' '-@'
right '-@NUM' tUMINUS
left tSTAR2 tDIVIDE tPERCENT
left '+' '-'
left tPLUS tMINUS
left tLSHFT tRSHFT
left tAMPER2
left tPIPE tCARET
@@ -426,9 +426,9 @@ rule

op: tPIPE | tCARET | tAMPER2 | tCMP | tEQ | tEQQ
| tMATCH | tNMATCH | tGT | tGEQ | tLT | tLEQ
| tNEQ | tLSHFT | tRSHFT | '+' | '-' | tSTAR2
| tNEQ | tLSHFT | tRSHFT | tPLUS | tMINUS | tSTAR2
| tSTAR | tDIVIDE | tPERCENT | tPOW | tBANG | tTILDE
| '+@' | '-@' | tAREF | tASET | tBACK_REF2
| tUPLUS | tUMINUS | tAREF | tASET | tBACK_REF2

reswords: k__LINE__ | k__FILE__ | klBEGIN | klEND | kALIAS | kAND
| kBEGIN | kBREAK | kCASE | kCLASS | kDEF | kDEFINED
@@ -477,11 +477,11 @@ rule
result = s(:erange, val[0], val[2])
result.line = val[0].line
}
| arg '+' arg
| arg tPLUS arg
{
result = new_call val[0], :"+", s(:arglist, val[2])
}
| arg '-' arg
| arg tMINUS arg
{
result = new_call val[0], :"-", s(:arglist, val[2])
}
@@ -503,12 +503,12 @@ rule
}
| '-@NUM' tINTEGER tPOW arg
| '-@NUM' tFLOAT tPOW arg
| '+@' arg
| tUPLUS arg
{
result = new_call val[1], :"+@", s(:arglist)
result = val[1] if [:int, :float].include? val[1].type
}
| '-@' arg
| tUMINUS arg
{
result = new_call val[1], :"-@", s(:arglist)
if val[1].type == :int
30 changes: 17 additions & 13 deletions lib/opal/parser/lexer.rb
Original file line number Diff line number Diff line change
@@ -978,32 +978,36 @@ def yylex
return [:tLAMBDA, scanner.matched]

elsif scan(/[+-]/)
result = scanner.matched
sign = result + '@'

if @lex_state == :expr_beg || @lex_state == :expr_mid
matched = scanner.matched
sign, utype = if matched == '+'
[:tPLUS, :tUPLUS]
else
[:tMINUS, :tUMINUS]
end

if beg?
@lex_state = :expr_mid
return [sign, sign]
elsif @lex_state == :expr_fname or @lex_state == :expr_dot
return [utype, matched]
elsif after_operator?
@lex_state = :expr_arg
return [:tIDENTIFIER, result + scanner.matched] if scan(/@/)
return [result, result]
return [:tIDENTIFIER, matched + '@'] if scan(/@/)
return [sign, matched]
end

if scan(/\=/)
@lex_state = :expr_beg
return [:tOP_ASGN, result]
return [:tOP_ASGN, matched]
end

if @lex_state == :expr_cmdarg || @lex_state == :expr_arg
if !check(/\s/) && @space_seen
if arg?
if !space? && @space_seen
@lex_state = :expr_mid
return [sign, sign]
return [utype, matched]
end
end

@lex_state = :expr_beg
return [result, result]
return [sign, sign]

elsif scan(/\?/)
if end?