mirror of
https://github.com/google/go-jsonnet.git
synced 2025-09-29 17:31:02 +02:00
Eliminate duplication in builtin names
Actually there was one (objectFieldEx) that was inconsistent, i.e. it was available by a different name from what appeared in the stack trace. This is now fixed.
This commit is contained in:
parent
0f049eaa38
commit
5c946dfb76
88
builtins.go
88
builtins.go
@ -622,6 +622,10 @@ func (b *UnaryBuiltin) Parameters() Parameters {
|
|||||||
return Parameters{required: b.parameters}
|
return Parameters{required: b.parameters}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (b *UnaryBuiltin) Name() ast.Identifier {
|
||||||
|
return b.name
|
||||||
|
}
|
||||||
|
|
||||||
type BinaryBuiltin struct {
|
type BinaryBuiltin struct {
|
||||||
name ast.Identifier
|
name ast.Identifier
|
||||||
function binaryBuiltin
|
function binaryBuiltin
|
||||||
@ -662,6 +666,10 @@ func (b *BinaryBuiltin) Parameters() Parameters {
|
|||||||
return Parameters{required: b.parameters}
|
return Parameters{required: b.parameters}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (b *BinaryBuiltin) Name() ast.Identifier {
|
||||||
|
return b.name
|
||||||
|
}
|
||||||
|
|
||||||
type TernaryBuiltin struct {
|
type TernaryBuiltin struct {
|
||||||
name ast.Identifier
|
name ast.Identifier
|
||||||
function ternaryBuiltin
|
function ternaryBuiltin
|
||||||
@ -677,6 +685,10 @@ func (b *TernaryBuiltin) Parameters() Parameters {
|
|||||||
return Parameters{required: b.parameters}
|
return Parameters{required: b.parameters}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (b *TernaryBuiltin) Name() ast.Identifier {
|
||||||
|
return b.name
|
||||||
|
}
|
||||||
|
|
||||||
var desugaredBop = map[ast.BinaryOp]ast.Identifier{
|
var desugaredBop = map[ast.BinaryOp]ast.Identifier{
|
||||||
ast.BopPercent: "mod",
|
ast.BopPercent: "mod",
|
||||||
ast.BopManifestEqual: "equals",
|
ast.BopManifestEqual: "equals",
|
||||||
@ -718,37 +730,49 @@ var uopBuiltins = []*UnaryBuiltin{
|
|||||||
ast.UopMinus: &UnaryBuiltin{name: "operator- (unary)", function: builtinUnaryMinus, parameters: ast.Identifiers{"x"}},
|
ast.UopMinus: &UnaryBuiltin{name: "operator- (unary)", function: builtinUnaryMinus, parameters: ast.Identifiers{"x"}},
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(sbarzowski) eliminate duplication in function names (e.g. build map from array or constants)
|
type builtin interface {
|
||||||
var funcBuiltins = map[string]evalCallable{
|
evalCallable
|
||||||
"extVar": &UnaryBuiltin{name: "extVar", function: builtinExtVar, parameters: ast.Identifiers{"x"}},
|
Name() ast.Identifier
|
||||||
"length": &UnaryBuiltin{name: "length", function: builtinLength, parameters: ast.Identifiers{"x"}},
|
}
|
||||||
"toString": &UnaryBuiltin{name: "toString", function: builtinToString, parameters: ast.Identifiers{"a"}},
|
|
||||||
"makeArray": &BinaryBuiltin{name: "makeArray", function: builtinMakeArray, parameters: ast.Identifiers{"sz", "func"}},
|
func buildBuiltinMap(builtins []builtin) map[string]evalCallable {
|
||||||
"flatMap": &BinaryBuiltin{name: "flatMap", function: builtinFlatMap, parameters: ast.Identifiers{"func", "arr"}},
|
result := make(map[string]evalCallable)
|
||||||
"filter": &BinaryBuiltin{name: "filter", function: builtinFilter, parameters: ast.Identifiers{"func", "arr"}},
|
for _, b := range builtins {
|
||||||
"primitiveEquals": &BinaryBuiltin{name: "primitiveEquals", function: primitiveEquals, parameters: ast.Identifiers{"sz", "func"}},
|
result[string(b.Name())] = b
|
||||||
"objectFieldsEx": &BinaryBuiltin{name: "objectFields", function: builtinObjectFieldsEx, parameters: ast.Identifiers{"obj", "hidden"}},
|
}
|
||||||
"objectHasEx": &TernaryBuiltin{name: "objectHasEx", function: builtinObjectHasEx, parameters: ast.Identifiers{"obj", "fname", "hidden"}},
|
return result
|
||||||
"type": &UnaryBuiltin{name: "type", function: builtinType, parameters: ast.Identifiers{"x"}},
|
}
|
||||||
"char": &UnaryBuiltin{name: "char", function: builtinChar, parameters: ast.Identifiers{"x"}},
|
|
||||||
"codepoint": &UnaryBuiltin{name: "codepoint", function: builtinCodepoint, parameters: ast.Identifiers{"x"}},
|
var funcBuiltins = buildBuiltinMap([]builtin{
|
||||||
"ceil": &UnaryBuiltin{name: "ceil", function: builtinCeil, parameters: ast.Identifiers{"x"}},
|
&UnaryBuiltin{name: "extVar", function: builtinExtVar, parameters: ast.Identifiers{"x"}},
|
||||||
"floor": &UnaryBuiltin{name: "floor", function: builtinFloor, parameters: ast.Identifiers{"x"}},
|
&UnaryBuiltin{name: "length", function: builtinLength, parameters: ast.Identifiers{"x"}},
|
||||||
"sqrt": &UnaryBuiltin{name: "sqrt", function: builtinSqrt, parameters: ast.Identifiers{"x"}},
|
&UnaryBuiltin{name: "toString", function: builtinToString, parameters: ast.Identifiers{"a"}},
|
||||||
"sin": &UnaryBuiltin{name: "sin", function: builtinSin, parameters: ast.Identifiers{"x"}},
|
&BinaryBuiltin{name: "makeArray", function: builtinMakeArray, parameters: ast.Identifiers{"sz", "func"}},
|
||||||
"cos": &UnaryBuiltin{name: "cos", function: builtinCos, parameters: ast.Identifiers{"x"}},
|
&BinaryBuiltin{name: "flatMap", function: builtinFlatMap, parameters: ast.Identifiers{"func", "arr"}},
|
||||||
"tan": &UnaryBuiltin{name: "tan", function: builtinTan, parameters: ast.Identifiers{"x"}},
|
&BinaryBuiltin{name: "filter", function: builtinFilter, parameters: ast.Identifiers{"func", "arr"}},
|
||||||
"asin": &UnaryBuiltin{name: "asin", function: builtinAsin, parameters: ast.Identifiers{"x"}},
|
&BinaryBuiltin{name: "primitiveEquals", function: primitiveEquals, parameters: ast.Identifiers{"sz", "func"}},
|
||||||
"acos": &UnaryBuiltin{name: "acos", function: builtinAcos, parameters: ast.Identifiers{"x"}},
|
&BinaryBuiltin{name: "objectFieldsEx", function: builtinObjectFieldsEx, parameters: ast.Identifiers{"obj", "hidden"}},
|
||||||
"atan": &UnaryBuiltin{name: "atan", function: builtinAtan, parameters: ast.Identifiers{"x"}},
|
&TernaryBuiltin{name: "objectHasEx", function: builtinObjectHasEx, parameters: ast.Identifiers{"obj", "fname", "hidden"}},
|
||||||
"log": &UnaryBuiltin{name: "log", function: builtinLog, parameters: ast.Identifiers{"x"}},
|
&UnaryBuiltin{name: "type", function: builtinType, parameters: ast.Identifiers{"x"}},
|
||||||
"exp": &UnaryBuiltin{name: "exp", function: builtinExp, parameters: ast.Identifiers{"x"}},
|
&UnaryBuiltin{name: "char", function: builtinChar, parameters: ast.Identifiers{"x"}},
|
||||||
"mantissa": &UnaryBuiltin{name: "mantissa", function: builtinMantissa, parameters: ast.Identifiers{"x"}},
|
&UnaryBuiltin{name: "codepoint", function: builtinCodepoint, parameters: ast.Identifiers{"x"}},
|
||||||
"exponent": &UnaryBuiltin{name: "exponent", function: builtinExponent, parameters: ast.Identifiers{"x"}},
|
&UnaryBuiltin{name: "ceil", function: builtinCeil, parameters: ast.Identifiers{"x"}},
|
||||||
"pow": &BinaryBuiltin{name: "pow", function: builtinPow, parameters: ast.Identifiers{"base", "exp"}},
|
&UnaryBuiltin{name: "floor", function: builtinFloor, parameters: ast.Identifiers{"x"}},
|
||||||
"modulo": &BinaryBuiltin{name: "modulo", function: builtinModulo, parameters: ast.Identifiers{"x", "y"}},
|
&UnaryBuiltin{name: "sqrt", function: builtinSqrt, parameters: ast.Identifiers{"x"}},
|
||||||
"md5": &UnaryBuiltin{name: "md5", function: builtinMd5, parameters: ast.Identifiers{"x"}},
|
&UnaryBuiltin{name: "sin", function: builtinSin, parameters: ast.Identifiers{"x"}},
|
||||||
|
&UnaryBuiltin{name: "cos", function: builtinCos, parameters: ast.Identifiers{"x"}},
|
||||||
|
&UnaryBuiltin{name: "tan", function: builtinTan, parameters: ast.Identifiers{"x"}},
|
||||||
|
&UnaryBuiltin{name: "asin", function: builtinAsin, parameters: ast.Identifiers{"x"}},
|
||||||
|
&UnaryBuiltin{name: "acos", function: builtinAcos, parameters: ast.Identifiers{"x"}},
|
||||||
|
&UnaryBuiltin{name: "atan", function: builtinAtan, parameters: ast.Identifiers{"x"}},
|
||||||
|
&UnaryBuiltin{name: "log", function: builtinLog, parameters: ast.Identifiers{"x"}},
|
||||||
|
&UnaryBuiltin{name: "exp", function: builtinExp, parameters: ast.Identifiers{"x"}},
|
||||||
|
&UnaryBuiltin{name: "mantissa", function: builtinMantissa, parameters: ast.Identifiers{"x"}},
|
||||||
|
&UnaryBuiltin{name: "exponent", function: builtinExponent, parameters: ast.Identifiers{"x"}},
|
||||||
|
&BinaryBuiltin{name: "pow", function: builtinPow, parameters: ast.Identifiers{"base", "exp"}},
|
||||||
|
&BinaryBuiltin{name: "modulo", function: builtinModulo, parameters: ast.Identifiers{"x", "y"}},
|
||||||
|
&UnaryBuiltin{name: "md5", function: builtinMd5, parameters: ast.Identifiers{"x"}},
|
||||||
|
|
||||||
// internal
|
// internal
|
||||||
"$objectFlatMerge": &UnaryBuiltin{name: "$objectFlatMerge", function: builtinUglyObjectFlatMerge, parameters: ast.Identifiers{"x"}},
|
&UnaryBuiltin{name: "$objectFlatMerge", function: builtinUglyObjectFlatMerge, parameters: ast.Identifiers{"x"}},
|
||||||
}
|
})
|
||||||
|
2
testdata/builtinObjectFieldsEx_bad.golden
vendored
2
testdata/builtinObjectFieldsEx_bad.golden
vendored
@ -1,6 +1,6 @@
|
|||||||
RUNTIME ERROR: Unexpected type number, expected object
|
RUNTIME ERROR: Unexpected type number, expected object
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
<builtin> builtin function <objectFields>
|
<builtin> builtin function <objectFieldsEx>
|
||||||
|
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
During evaluation
|
During evaluation
|
||||||
|
2
testdata/builtinObjectFieldsEx_bad2.golden
vendored
2
testdata/builtinObjectFieldsEx_bad2.golden
vendored
@ -1,6 +1,6 @@
|
|||||||
RUNTIME ERROR: Unexpected type string, expected boolean
|
RUNTIME ERROR: Unexpected type string, expected boolean
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
<builtin> builtin function <objectFields>
|
<builtin> builtin function <objectFieldsEx>
|
||||||
|
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
During evaluation
|
During evaluation
|
||||||
|
Loading…
x
Reference in New Issue
Block a user