func translateFnStatement(node *ast.FnNode) core.ScDefn {
	params := []core.Name{}
	for _, param := range node.Params {
		params = append(params, core.Name(param))
	}
	return core.ScDefn{core.Name(node.Name), params, translateExpr(node.Body)}
}
Beispiel #2
0
func createNameArityCodeMapping(gmh core.GmHeap, gmg core.GmGlobals) []NameArityCodeMapping {
	globalMapping := []NameArityCodeMapping{}
	for _, obj := range gmg {
		globalMapping = append(globalMapping, createEntry(gmh, obj.Name, obj.Addr))
	}
	globalMapping = append(globalMapping, NameArityCodeMapping{core.Name("connet"), Obj{Arity(0), core.GmCode{}}})
	globalMapping = append(globalMapping, NameArityCodeMapping{core.Name("send"), Obj{Arity(1), core.GmCode{}}})
	return globalMapping
}
func translateFnExpr(node *ast.FnExprNode) core.CoreExpr {
	params := []core.Name{}
	for _, param := range node.Params {
		params = append(params, core.Name(param))
	}
	return core.ELam{params, translateExpr(node.Body)}
}
func translateNode(node interface{}) core.ScDefn {
	switch n := node.(type) {
	/*
		case *ast.LetNode:
			return translateLet(n)
		case *ast.FnExprNode:
			return translateFnExpr(n)
	*/
	case *ast.FnNode:
		return translateFnStatement(n)

	case *ast.CommentNode:
		return core.ScDefn{core.Name("comment"), []core.Name{}, core.ENum{true, false, false, 0, 0, 0, "0"}}

	default:
		return translateFnStatement(n.(*ast.FnNode))
		// return translateExpr(n)
	}
}
func translateDefnNode(node *ast.DefnNode) core.Defn {
	expr := translateExpr(node.Expr)
	return core.Defn{core.Name(node.Var), expr}
}