address jbeda's comments

This commit is contained in:
Dave Cunningham 2016-05-02 00:20:08 -04:00
parent 09c7c8c7c0
commit c5225a1b3a
2 changed files with 18 additions and 19 deletions

View File

@ -179,7 +179,7 @@ func desugarFields(location LocationRange, fields *astObjectFields, objLevel int
field.kind = astObjectFieldExpr field.kind = astObjectFieldExpr
case astObjectLocal: case astObjectLocal:
return fmt.Errorf("INTERNAL ERROR: Locals should be removed by now.") return fmt.Errorf("INTERNAL ERROR: Locals should be removed by now")
} }
} }
@ -199,34 +199,32 @@ func desugarFields(location LocationRange, fields *astObjectFields, objLevel int
return nil return nil
} }
func desugar(astPtr *astNode, objLevel int) error { func desugar(astPtr *astNode, objLevel int) (err error) {
ast := *astPtr ast := *astPtr
// TODO(dcunnin): Remove all uses of unimplErr. // TODO(dcunnin): Remove all uses of unimplErr.
unimplErr := makeStaticError(fmt.Sprintf("Desugarer does not yet implement ast: %s", reflect.TypeOf(ast)), *ast.Loc()) unimplErr := makeStaticError(fmt.Sprintf("Desugarer does not yet implement ast: %s", reflect.TypeOf(ast)), *ast.Loc())
var err error // Make all recursive calls of the form err = desugar, rather than some being err := desugar
switch ast := ast.(type) { switch ast := ast.(type) {
case *astApply: case *astApply:
err = desugar(&ast.target, objLevel) err = desugar(&ast.target, objLevel)
if err != nil { if err != nil {
return err return
} }
for i := range ast.arguments { for i := range ast.arguments {
err = desugar(&ast.arguments[i], objLevel) err = desugar(&ast.arguments[i], objLevel)
if err != nil { if err != nil {
return err return
} }
} }
case *astApplyBrace: case *astApplyBrace:
err = desugar(&ast.left, objLevel) err = desugar(&ast.left, objLevel)
if err != nil { if err != nil {
return err return
} }
err = desugar(&ast.right, objLevel) err = desugar(&ast.right, objLevel)
if err != nil { if err != nil {
return err return
} }
*astPtr = &astBinary{ *astPtr = &astBinary{
astNodeBase: ast.astNodeBase, astNodeBase: ast.astNodeBase,
@ -239,7 +237,7 @@ func desugar(astPtr *astNode, objLevel int) error {
for i := range ast.elements { for i := range ast.elements {
err = desugar(&ast.elements[i], objLevel) err = desugar(&ast.elements[i], objLevel)
if err != nil { if err != nil {
return err return
} }
} }
@ -252,11 +250,11 @@ func desugar(astPtr *astNode, objLevel int) error {
case *astBinary: case *astBinary:
err = desugar(&ast.left, objLevel) err = desugar(&ast.left, objLevel)
if err != nil { if err != nil {
return err return
} }
err = desugar(&ast.right, objLevel) err = desugar(&ast.right, objLevel)
if err != nil { if err != nil {
return err return
} }
// TODO(dcunnin): Need to handle bopPercent, bopManifestUnequal, bopManifestEqual // TODO(dcunnin): Need to handle bopPercent, bopManifestUnequal, bopManifestEqual
@ -266,11 +264,11 @@ func desugar(astPtr *astNode, objLevel int) error {
case *astConditional: case *astConditional:
err = desugar(&ast.cond, objLevel) err = desugar(&ast.cond, objLevel)
if err != nil { if err != nil {
return err return
} }
err = desugar(&ast.branchTrue, objLevel) err = desugar(&ast.branchTrue, objLevel)
if err != nil { if err != nil {
return err return
} }
if ast.branchFalse != nil { if ast.branchFalse != nil {
ast.branchFalse = &astLiteralNull{} ast.branchFalse = &astLiteralNull{}
@ -285,13 +283,13 @@ func desugar(astPtr *astNode, objLevel int) error {
case *astError: case *astError:
err = desugar(&ast.expr, objLevel) err = desugar(&ast.expr, objLevel)
if err != nil { if err != nil {
return err return
} }
case *astFunction: case *astFunction:
err = desugar(&ast.body, objLevel) err = desugar(&ast.body, objLevel)
if err != nil { if err != nil {
return err return
} }
case *astImport: case *astImport:
@ -307,12 +305,12 @@ func desugar(astPtr *astNode, objLevel int) error {
for _, bind := range ast.binds { for _, bind := range ast.binds {
err = desugar(&bind.body, objLevel) err = desugar(&bind.body, objLevel)
if err != nil { if err != nil {
return err return
} }
} }
err = desugar(&ast.body, objLevel) err = desugar(&ast.body, objLevel)
if err != nil { if err != nil {
return err return
} }
// TODO(dcunnin): Desugar local functions // TODO(dcunnin): Desugar local functions
@ -343,7 +341,7 @@ func desugar(astPtr *astNode, objLevel int) error {
err = desugarFields(*ast.Loc(), &ast.fields, objLevel) err = desugarFields(*ast.Loc(), &ast.fields, objLevel)
if err != nil { if err != nil {
return err return
} }
var newFields astDesugaredObjectFields var newFields astDesugaredObjectFields
@ -379,7 +377,7 @@ func desugar(astPtr *astNode, objLevel int) error {
case *astUnary: case *astUnary:
err = desugar(&ast.expr, objLevel) err = desugar(&ast.expr, objLevel)
if err != nil { if err != nil {
return err return
} }
case *astVar: case *astVar:

View File

@ -379,6 +379,7 @@ func (i *interpreter) evaluate(a astNode) (value, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
// TODO(dcunnin): Check the type properly. The following code just panics.
leftNum := leftVal.(*valueNumber).value leftNum := leftVal.(*valueNumber).value
rightVal, err := i.evaluate(ast.right) rightVal, err := i.evaluate(ast.right)
if err != nil { if err != nil {