WARNING! Access to this system is limited to authorised users only.
Unauthorised users may be subject to prosecution.
Unauthorised access to this system is a criminal offence under Australian law (Federal Crimes Act 1914 Part VIA)
It is a criminal offence to:
(1) Obtain access to data without authority. -Penalty 2 years imprisonment.
(2) Damage, delete, alter or insert data without authority. -Penalty 10 years imprisonment.
User activity is monitored and recorded. Anyone using this system expressly consents to such monitoring and recording.

To protect your data, the CISO officer has suggested users to enable 2FA as soon as possible.
Currently 2.7% of users enabled 2FA.

Commit 5a852f01 authored by Kunshan Wang's avatar Kunshan Wang
Browse files

Added an "allNs" for all identified entities.

parent 948473b4
......@@ -7,20 +7,23 @@ class Bundle {
/*
* There is a hierarchy of namespaces. A subnode is a subset of the parent.
*
* + typeNs // All types
* + funcSigNs // All function signatures
* + funcVerNs // All function versions
* + varNs // All variables, global or local
* + globalVarNs // Global variables
* + constantNs // Constants
* + globalCellNs // Global cells
* + funcNs // Functions
* + localVarNs // Local variables (per function version)
* + bbNs // Basic blocks (per function version)
* + allNs // All Identified entities
* + typeNs // All types
* + funcSigNs // All function signatures
* + funcVerNs // All function versions
* + varNs // All variables, global or local
* + globalVarNs // Global variables
* + constantNs // Constants
* + globalCellNs // Global cells
* + funcNs // Functions
* + localVarNs // Local variables (per function version)
* + bbNs // Basic blocks (per function version)
*
* TODO: Should there be a global "basic block ns for all function versions"?
*/
val allNs = new SimpleNamespace[Identified]()
val typeNs = new SimpleNamespace[Type]()
val funcSigNs = new SimpleNamespace[FuncSig]()
val funcVerNs = new SimpleNamespace[FuncVer]()
......@@ -31,7 +34,6 @@ class Bundle {
val globalCellNs = new SimpleNamespace[GlobalCell]()
val funcNs = new SimpleNamespace[Function]()
private def simpleMerge[T <: Identified](oldNs: Namespace[T], newNs: Namespace[T]) {
for (cand <- newNs.all) {
if (!cand.isInstanceOf[Function] || oldNs.get(cand.id) == None) {
......@@ -57,14 +59,16 @@ class Bundle {
}
}
}
def merge(newBundle: Bundle) {
simpleMerge(varNs, newBundle.varNs)
simpleMerge(globalVarNs, newBundle.globalVarNs)
simpleMerge(allNs, newBundle.allNs)
simpleMerge(typeNs, newBundle.typeNs)
simpleMerge(funcSigNs, newBundle.funcSigNs)
simpleMerge(funcVerNs, newBundle.funcVerNs)
simpleMerge(varNs, newBundle.varNs)
simpleMerge(globalVarNs, newBundle.globalVarNs)
simpleMerge(constantNs, newBundle.constantNs)
simpleMerge(globalCellNs, newBundle.globalCellNs)
simpleMerge(funcVerNs, newBundle.funcVerNs)
mergeFunc(funcNs, newBundle.funcNs)
}
}
......@@ -138,19 +138,28 @@ class UIRTextReader(val idFactory: IDFactory) {
// Add entities to namespaces.
def addTy(obj: Type): Unit = bundle.typeNs.add(obj)
def addSig(obj: FuncSig): Unit = bundle.funcSigNs.add(obj)
def addTy(obj: Type): Unit = {
bundle.allNs.add(obj)
bundle.typeNs.add(obj)
}
def addSig(obj: FuncSig): Unit = {
bundle.allNs.add(obj)
bundle.funcSigNs.add(obj)
}
def addConst(obj: Constant): Unit = {
bundle.allNs.add(obj)
bundle.constantNs.add(obj)
bundle.globalVarNs.add(obj)
bundle.varNs.add(obj)
}
def addGlobalCell(obj: GlobalCell): Unit = {
bundle.allNs.add(obj)
bundle.globalCellNs.add(obj)
bundle.globalVarNs.add(obj)
bundle.varNs.add(obj)
}
def addFunc(obj: Function): Unit = {
bundle.allNs.add(obj)
bundle.funcNs.add(obj)
bundle.globalVarNs.add(obj)
bundle.varNs.add(obj)
......@@ -158,8 +167,12 @@ class UIRTextReader(val idFactory: IDFactory) {
def addLocalVar(obj: LocalVariable, localNs: Namespace[LocalVariable]) = {
localNs.add(obj)
bundle.varNs.add(obj)
bundle.allNs.add(obj)
}
def addFuncVer(obj: FuncVer): Unit = {
bundle.allNs.add(obj)
bundle.funcVerNs.add(obj)
}
def addFuncVer(obj: FuncVer): Unit = bundle.funcVerNs.add(obj)
// Resolve types, with parse-time checking.
......@@ -328,6 +341,7 @@ class UIRTextReader(val idFactory: IDFactory) {
bb.id = idFactory.getID()
bb.name = Some(globalize(bbCtx.label().name()))
ver.bbNs.add(bb)
bundle.allNs.add(bb)
bb.insts = bbCtx.inst.map(mkInst)
......
......@@ -11,6 +11,7 @@ import UIRTextReader.globalize
trait TestingBundlesValidators extends Matchers with ExtraMatchers {
implicit class MagicalOur(b: Bundle) {
def anything(s: String) = b.allNs(s)
def ty(s: String) = b.typeNs(s)
def const(s: String) = b.constantNs (s)
def value(s: String) = b.varNs(s)
......@@ -129,6 +130,13 @@ trait TestingBundlesValidators extends Matchers with ExtraMatchers {
its.elemTy shouldBe (our ty "@double")
its.len shouldEqual 2
}
// Testing namespaces
val i8 = our ty "@i8"
our anything "@i8" shouldBe i8
val sig0 = our sig "@sig0"
our anything "@sig0" shouldBe sig0
}
def validateConstants(bundle: Bundle) {
......@@ -217,13 +225,15 @@ trait TestingBundlesValidators extends Matchers with ExtraMatchers {
}
// Testing namespaces
var ci8 = our const "@ci8"
val ci8 = our const "@ci8"
our globalValue "@ci8" shouldBe ci8
our value "@ci8" shouldBe ci8
our anything "@ci8" shouldBe ci8
var gi64 = our globalCell "@gi64"
val gi64 = our globalCell "@gi64"
our globalValue "@gi64" shouldBe gi64
our value "@gi64" shouldBe gi64
our anything "@gi64" shouldBe gi64
}
def validateFunctions(bundle: Bundle) {
......@@ -293,16 +303,20 @@ trait TestingBundlesValidators extends Matchers with ExtraMatchers {
val main = our func "@main"
our globalValue "@main" shouldBe main
our value "@main" shouldBe main
our anything "@main" shouldBe main
val mainV1 = our funcVer "@main_v1"
our anything "@main_v1" shouldBe mainV1
val argcGN = "@main_v1.argc"
val argc = mainV1.localVarNs(argcGN)
our value argcGN shouldBe argc
our anything argcGN shouldBe argc
val addGN = "@main_v1.add"
val add = mainV1.localVarNs(addGN)
our value addGN shouldBe add
our anything addGN shouldBe add
}
def in(func: Function)(f: (Function, FuncVer) => Unit) {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment