Exemplo n.º 1
0
  protected MixedModeFunction(
      String name,
      Iterable<String> parameters,
      int numMandatoryParameters,
      boolean onlyNamedArguments,
      Location location) {
    super(name);
    this.parameters = ImmutableList.copyOf(parameters);
    this.numMandatoryParameters = numMandatoryParameters;
    this.onlyNamedArguments = onlyNamedArguments;
    this.location = location;

    // Fake a signature from the above
    this.signature =
        FunctionSignature.WithValues.<Object, SkylarkType>create(
            FunctionSignature.of(numMandatoryParameters, this.parameters.toArray(new String[0])));
  }
Exemplo n.º 2
0
  @Override
  void exec(Environment env) throws EvalException, InterruptedException {
    List<Expression> defaultExpressions = signature.getDefaultValues();
    ArrayList<Object> defaultValues = null;
    ArrayList<SkylarkType> types = null;

    if (defaultExpressions != null) {
      defaultValues = new ArrayList<>(defaultExpressions.size());
      for (Expression expr : defaultExpressions) {
        defaultValues.add(expr.eval(env));
      }
    }
    env.update(
        ident.getName(),
        new UserDefinedFunction(
            ident,
            FunctionSignature.WithValues.<Object, SkylarkType>create(
                signature.getSignature(), defaultValues, types),
            statements,
            (SkylarkEnvironment) env));
  }
Exemplo n.º 3
0
 /** Create a function using a signature without defaults */
 public MixedModeFunction(String name, FunctionSignature signature) {
   this(name, FunctionSignature.WithValues.<Object, SkylarkType>create(signature), null);
 }