Skip to content

Commit c2bd58c

Browse files
committed
Rename GlobalVariables.put => define and ensure the variable was not defined before
1 parent 59f7505 commit c2bd58c

File tree

3 files changed

+14
-15
lines changed

3 files changed

+14
-15
lines changed

src/main/java/org/truffleruby/core/kernel/TruffleKernelNodes.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,11 @@
2525
import org.truffleruby.language.RubyNode;
2626
import org.truffleruby.language.RubyRootNode;
2727
import org.truffleruby.language.control.RaiseException;
28-
import org.truffleruby.language.globals.GlobalVariableStorage;
2928
import org.truffleruby.language.globals.ReadSimpleGlobalVariableNode;
3029
import org.truffleruby.language.globals.WriteSimpleGlobalVariableNode;
3130
import org.truffleruby.language.loader.CodeLoader;
3231
import org.truffleruby.language.loader.FileLoader;
3332
import org.truffleruby.language.methods.DeclarationContext;
34-
import org.truffleruby.language.objects.shared.WriteBarrierNode;
3533
import org.truffleruby.language.threadlocal.FindThreadAndFrameLocalStorageNode;
3634
import org.truffleruby.language.threadlocal.FindThreadAndFrameLocalStorageNodeGen;
3735
import org.truffleruby.parser.ParserContext;
@@ -138,7 +136,7 @@ public abstract static class DefineHookedVariableInnerNode extends CoreMethodArr
138136
@TruffleBoundary
139137
@Specialization(guards = { "isRubySymbol(name)", "isRubyProc(getter)", "isRubyProc(setter)" })
140138
public DynamicObject defineHookedVariableInnerNode(DynamicObject name, DynamicObject getter, DynamicObject setter, DynamicObject isDefined) {
141-
getContext().getCoreLibrary().getGlobalVariables().put(Layouts.SYMBOL.getString(name), getter, setter, isDefined);
139+
getContext().getCoreLibrary().getGlobalVariables().define(Layouts.SYMBOL.getString(name), getter, setter, isDefined);
142140
return nil();
143141
}
144142

src/main/java/org/truffleruby/language/TruffleBootNodes.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,14 +165,14 @@ private void setArgvGlobals(StringNodes.MakeStringNode makeStringNode) {
165165
String key = global_values[i];
166166
String value = global_values[i + 1];
167167

168-
getContext().getCoreLibrary().getGlobalVariables().put(
168+
getContext().getCoreLibrary().getGlobalVariables().define(
169169
"$" + key,
170170
makeStringNode.executeMake(value, UTF8Encoding.INSTANCE, CodeRange.CR_UNKNOWN));
171171
}
172172

173173
String[] global_flags = getContext().getOptions().ARGV_GLOBAL_FLAGS;
174174
for (String flag : global_flags) {
175-
getContext().getCoreLibrary().getGlobalVariables().put("$" + flag, true);
175+
getContext().getCoreLibrary().getGlobalVariables().define("$" + flag, true);
176176
}
177177
}
178178
}

src/main/java/org/truffleruby/language/globals/GlobalVariables.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414

1515
import java.util.ArrayList;
1616
import java.util.Collection;
17-
import java.util.Map;
1817
import java.util.concurrent.ConcurrentHashMap;
1918
import java.util.concurrent.ConcurrentMap;
2019

@@ -45,17 +44,19 @@ public GlobalVariableReader getReader(String name) {
4544
return new GlobalVariableReader(this, name);
4645
}
4746

48-
public GlobalVariableStorage put(String name, Object value) {
49-
assert !variables.containsKey(name);
50-
final GlobalVariableStorage storage = new GlobalVariableStorage(value, defaultValue, null, null, null);
51-
variables.put(name, storage);
52-
return storage;
47+
public GlobalVariableStorage define(String name, Object value) {
48+
return define(name, new GlobalVariableStorage(value, defaultValue, null, null, null));
49+
}
50+
51+
public GlobalVariableStorage define(String name, DynamicObject getter, DynamicObject setter, DynamicObject isDefined) {
52+
return define(name, new GlobalVariableStorage(defaultValue, getter, setter, isDefined));
5353
}
5454

55-
public GlobalVariableStorage put(String name, DynamicObject getter, DynamicObject setter, DynamicObject isDefined) {
56-
assert !variables.containsKey(name);
57-
final GlobalVariableStorage storage = new GlobalVariableStorage(defaultValue, getter, setter, isDefined);
58-
variables.put(name, storage);
55+
private GlobalVariableStorage define(String name, GlobalVariableStorage storage) {
56+
final GlobalVariableStorage previous = variables.putIfAbsent(name, storage);
57+
if (previous != null) {
58+
throw new IllegalArgumentException("Global variable $" + name + " is already defined");
59+
}
5960
return storage;
6061
}
6162

0 commit comments

Comments
 (0)