Skip to content

Commit

Permalink
feat: wip
Browse files Browse the repository at this point in the history
  • Loading branch information
Slartibartfass2 committed Nov 23, 2024
1 parent f27435c commit f5c30b5
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 0 deletions.
4 changes: 4 additions & 0 deletions example1.r
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
person <- list(age = 24, name = "John")
person$name <- "Jane"
person$age <- 44
result <- person$name
7 changes: 7 additions & 0 deletions src/dataflow/environments/define.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,11 @@ const hasNoControlDependencies = (definition: IdentifierDefinition) => definitio
function defInEnv(newEnvironments: IEnvironment, name: string, definition: IdentifierDefinition) {
const existing = newEnvironments.memory.get(name);
// check if it is maybe or not
// console.log('existing:', existing, 'definition:', definition);
const inGraphDefinition = definition as InGraphIdentifierDefinition;
if(inGraphDefinition !== undefined) {
console.log('def', inGraphDefinition);
}
if(existing === undefined || definition.controlDependencies === undefined) {
newEnvironments.memory.set(name, [definition]);
} else {
Expand All @@ -30,6 +34,7 @@ function defInEnv(newEnvironments: IEnvironment, name: string, definition: Ident
}
existing.push(definition);
}
// console.log('after:', newEnvironments.memory.get(name));
}

/**
Expand All @@ -38,6 +43,8 @@ function defInEnv(newEnvironments: IEnvironment, name: string, definition: Ident
*/
export function define(definition: IdentifierDefinition, superAssign: boolean | undefined, environment: REnvironmentInformation): REnvironmentInformation {
const name = definition.name;
// console.log('defining:', name);
// console.log('definition:', definition);
guard(name !== undefined, () => `Name must be defined, but isn't for ${JSON.stringify(definition)}`);
let newEnvironment;
if(superAssign) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,10 @@ export function processAccess<OtherInfo>(
if(newArgs[0] !== EmptyArgument) {
const accessArg = newArgs[1] === EmptyArgument ? undefined : newArgs[1].lexeme;
const resolvedFirstParameter = resolveByName(newArgs[0].lexeme ?? '', data.environment);
// console.log('requesting to access', accessArg);
// console.log('resolvedFirstParameter', resolvedFirstParameter);
const resolvedFirstParameterIndices = resolvedFirstParameter?.flatMap(param => (param as InGraphIdentifierDefinition)?.indices ?? []);
console.log('resolved', newArgs[0].lexeme, 'to', resolvedFirstParameterIndices);
accessedArguments = resolvedFirstParameterIndices?.filter(index => index.lexeme === accessArg);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,9 @@ export function markAsAssignment(
if(sourceIds.length === 1) {
// support for tracking indices
indices = information.graph.getVertex(sourceIds[0])?.indices;
if(indices) {
console.log(`Defining indices ${indices.map((index) => `{ lexeme: ${index.lexeme}, nodeId: ${index.nodeId} }`).join(',')} for ${nodeToDefine.name}`);
}
}
if(config?.indices !== undefined) {
indices = (indices ?? []).concat(config.indices);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ export function processReplacementFunction<OtherInfo>(
const indexArg = nonEmptyArgs.find(arg => arg.info.role === RoleInParent.IndexAccess);
const valueArg = nonEmptyArgs.find(arg => arg.info.role === RoleInParent.BinaryOperationRhs);
if(indexArg !== undefined && valueArg?.value !== undefined && accessedArg != undefined) {
console.log('accessed', accessedArg);
console.log('index', indexArg);
console.log('value', valueArg);
// use access node as reference to get complete line in slice
indices = [ { lexeme: indexArg.lexeme, nodeId: accessedArg.info.parent ?? '' } ]; // valueArg.value.info.id
}
Expand Down

0 comments on commit f5c30b5

Please sign in to comment.