diff options
author | Laurent Le Brun <laurentlb@google.com> | 2015-04-02 11:32:47 +0000 |
---|---|---|
committer | Han-Wen Nienhuys <hanwen@google.com> | 2015-04-02 12:49:50 +0000 |
commit | 0c44aa4d8f6bbb9356876c47680c09c2e85f87c6 (patch) | |
tree | 494034b47e7fef6c185837706e7438aeb42b773f /src/main/java/com/google/devtools/build/lib | |
parent | 9060e16088490c038e64188652922f7f5407f652 (diff) |
Skylark: Add function 'int'
--
MOS_MIGRATED_REVID=90151316
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/packages/MethodLibrary.java | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/packages/MethodLibrary.java b/src/main/java/com/google/devtools/build/lib/packages/MethodLibrary.java index 267f9ff212..7b00ea0d1e 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/MethodLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/packages/MethodLibrary.java @@ -673,6 +673,24 @@ public class MethodLibrary { } }; + @SkylarkBuiltin(name = "int", returnType = Integer.class, doc = "Converts a string to int, " + + "using base 10. It raises an error if the conversion fails." + + "<pre class=\"language-python\">int(\"123\") == 123</pre>", + mandatoryParams = {@Param(name = "x", type = String.class, doc = "The string to convert.")}) + private static Function int_ = + new MixedModeFunction("int", ImmutableList.of("x"), 1, false) { + @Override + public Object call(Object[] args, FuncallExpression ast) + throws EvalException, ConversionException { + String str = Type.STRING.convert(args[0], "'int' operand"); + try { + return Integer.parseInt(str); + } catch (NumberFormatException e) { + throw new EvalException(ast.getLocation(), "invalid literal for int(): " + str); + } + } + }; + @SkylarkBuiltin(name = "struct", returnType = SkylarkClassObject.class, doc = "Creates an immutable struct using the keyword arguments as fields. It is used to group " + "multiple values together.Example:<br>" @@ -1109,11 +1127,12 @@ public class MethodLibrary { // TODO(bazel-team): String methods are added two times, because there are // a lot of cases when they are used as global functions in the depot. Those // should be cleaned up first. + .put(bool, SkylarkType.BOOL) + .put(int_, SkylarkType.INT) + .put(len, SkylarkType.INT) .put(minus, SkylarkType.INT) .put(select, SkylarkType.of(SelectorValue.class)) - .put(len, SkylarkType.INT) .put(str, SkylarkType.STRING) - .put(bool, SkylarkType.BOOL) .build(); private static final Map<Function, SkylarkType> skylarkGlobalFunctions = ImmutableMap |